您好,登錄后才能下訂單哦!
基本原理
HTTP協議采用明文傳輸數據,當涉及敏感信息的傳送時,極有可能會受到竊聽或者中間人的攻擊。HTTPS是HTTP與SSL/TLS的組合,即使用加密通訊以及網絡服務器的身份鑒定來進行信息的安全傳輸。其核心有二:
握手流程
HTTPS鏈接的建立過程中涉及到服務器端證書、客戶端證書(可選)、服務器端的非對稱秘鑰以及后續通信過程中使用的對稱秘鑰幾個內容。
下圖簡要的說明了這個流程的實現。
一開始我也心存疑問:為什么要單獨使用另外一組對稱秘鑰來實現對信息的加密而不直接使用服務器和客戶端雙方的非對稱秘鑰呢?我自身非常認同下面這個回答的解釋:
傳輸過程使用對稱密鑰是因為對稱加密比非對稱加密的運算量低一個數量級以上,所以這樣的方式可以提高雙方會話的運算速度。
對于加密算法不是非常了解,希望大牛指點一二。
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鏈接中使用的文件是
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方法會阻塞其他進程直到文件的讀取完畢,在讀取關鍵的配置文件的時候這樣的方法是比較適宜的。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。