中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解HTTPS 的原理和 NodeJS 的實現

發布時間:2020-10-18 10:30:04 來源:腳本之家 閱讀:194 作者:yeelan0319 欄目:web開發

基本原理

HTTP協議采用明文傳輸數據,當涉及敏感信息的傳送時,極有可能會受到竊聽或者中間人的攻擊。HTTPS是HTTP與SSL/TLS的組合,即使用加密通訊以及網絡服務器的身份鑒定來進行信息的安全傳輸。其核心有二:

  1. 使用證書對服務器及請求端的身份驗證
  2. 使用一組對稱秘鑰加密包括請求頭在內的所有信息傳輸

握手流程

HTTPS鏈接的建立過程中涉及到服務器端證書、客戶端證書(可選)、服務器端的非對稱秘鑰以及后續通信過程中使用的對稱秘鑰幾個內容。

  1. 客戶端對HTTPS的地址發出請求,并且將自己的SSL版本號等信息發送給服務器
  2. 服務器接收到請求,將服務器證書和公鑰等信息返回給客戶端
  3. 客戶端接收到證書后向證書頒發機構驗證證書的合法性。如果證書不合法(比如自行簽發的證書),則向用戶發出警告并確認是否繼續,用戶可以選擇在此時離開終止HTTPS的鏈接。
  4. 證書合法或客戶端確認在不安全的情況下繼續,客戶端生成pre-master secret并且使用2中收到的服務器公鑰加密后發送給服務器。如果是使用交互策略的TLS,則同時需要將客戶端的證書發送給服務器。服務器檢查客戶端的證書頒發機構是否在信任列表中,以及證書內容是否合法。若不合法,結束本次會話。
  5. 服務器使用私鑰解密pre-master secret,然后雙方通過一種實現商定好的加密算法生成本次通訊使用的master secret。
  6. 雙方互相通知對方本次SSL握手成功,其后均使用master secret對傳輸內容進行加密。

下圖簡要的說明了這個流程的實現。

詳解HTTPS 的原理和 NodeJS 的實現

一開始我也心存疑問:為什么要單獨使用另外一組對稱秘鑰來實現對信息的加密而不直接使用服務器和客戶端雙方的非對稱秘鑰呢?我自身非常認同下面這個回答的解釋:

傳輸過程使用對稱密鑰是因為對稱加密比非對稱加密的運算量低一個數量級以上,所以這樣的方式可以提高雙方會話的運算速度。

對于加密算法不是非常了解,希望大牛指點一二。

Openssl自簽名證書的生成

HTTPS中一個關鍵就是證書文件。當然我們可以找專業的第三方機構簽發。自己玩玩的話就用自簽名的證書就可以了,用戶在訪問的時候則需要確認安全性問題。 1、生成傳輸pre-master secret的時候所需要的Server端的私鑰,運行時提示需要輸入密碼,用于對key的加密。以后每次讀取此文件的時候,都需要輸入指令。

# 生成服務器端的非對稱秘鑰
openssl genrsa -des3 -out server.key 1024

# 生成簽名請求的CSR文件
openssl req -new -key server.key -out server.csr

# 自己對證書進行簽名,簽名的有效期是365天
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

# 去除證書文件的password
cp server.key server.key.orig
openssl rsa -in server.key.orig -out server.key

最終在建立HTTPS鏈接中使用的文件是

  1. server.crt
  2. server.key

NodeJS建立一個HTTPS的Server

var httpsModule = require('https');
var fs = require('fs');

var https = httpsModule.Server({
   key: fs.readFileSync('/path/to/server.key'),
   cert: fs.readFileSync('/path/to/server.crt')
}, function(req, res){
  res.writeHead(200);
  res.end("hello world\n");
});

//https默認de監聽端口時443,啟動1000以下的端口時需要sudo權限
https.listen(443, function(err){ 
   console.log("https listening on port: 443");
});

這里使用的fs.readFileSync方法會阻塞其他進程直到文件的讀取完畢,在讀取關鍵的配置文件的時候這樣的方法是比較適宜的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正安县| 文水县| 平顺县| 阿克苏市| 龙井市| 禹城市| 建平县| 财经| 江源县| 南木林县| 姚安县| 石狮市| 西宁市| 靖西县| 门源| 阿瓦提县| 万宁市| 东光县| 保康县| 玛多县| 磴口县| 徐州市| 商城县| 苗栗市| 通州区| 盖州市| 宁海县| 宿州市| 赣州市| 濉溪县| 丰都县| 巴塘县| 巍山| 榆中县| 和顺县| 铁岭市| 浙江省| 阿巴嘎旗| 明星| 胶州市| 平罗县|