基本原理
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),浦口企業(yè)網(wǎng)站建設(shè),浦口品牌網(wǎng)站建設(shè),網(wǎng)站定制,浦口網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,浦口網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
HTTP協(xié)議采用明文傳輸數(shù)據(jù),當(dāng)涉及敏感信息的傳送時(shí),極有可能會(huì)受到竊聽(tīng)或者中間人的攻擊。HTTPS是HTTP與SSL/TLS的組合,即使用加密通訊以及網(wǎng)絡(luò)服務(wù)器的身份鑒定來(lái)進(jìn)行信息的安全傳輸。其核心有二:
握手流程
HTTPS鏈接的建立過(guò)程中涉及到服務(wù)器端證書(shū)、客戶端證書(shū)(可選)、服務(wù)器端的非對(duì)稱秘鑰以及后續(xù)通信過(guò)程中使用的對(duì)稱秘鑰幾個(gè)內(nèi)容。
下圖簡(jiǎn)要的說(shuō)明了這個(gè)流程的實(shí)現(xiàn)。
一開(kāi)始我也心存疑問(wèn):為什么要單獨(dú)使用另外一組對(duì)稱秘鑰來(lái)實(shí)現(xiàn)對(duì)信息的加密而不直接使用服務(wù)器和客戶端雙方的非對(duì)稱秘鑰呢?我自身非常認(rèn)同下面這個(gè)回答的解釋:
傳輸過(guò)程使用對(duì)稱密鑰是因?yàn)閷?duì)稱加密比非對(duì)稱加密的運(yùn)算量低一個(gè)數(shù)量級(jí)以上,所以這樣的方式可以提高雙方會(huì)話的運(yùn)算速度。
對(duì)于加密算法不是非常了解,希望大牛指點(diǎn)一二。
Openssl自簽名證書(shū)的生成
HTTPS中一個(gè)關(guān)鍵就是證書(shū)文件。當(dāng)然我們可以找專業(yè)的第三方機(jī)構(gòu)簽發(fā)。自己玩玩的話就用自簽名的證書(shū)就可以了,用戶在訪問(wèn)的時(shí)候則需要確認(rèn)安全性問(wèn)題。 1、生成傳輸pre-master secret的時(shí)候所需要的Server端的私鑰,運(yùn)行時(shí)提示需要輸入密碼,用于對(duì)key的加密。以后每次讀取此文件的時(shí)候,都需要輸入指令。
# 生成服務(wù)器端的非對(duì)稱秘鑰 openssl genrsa -des3 -out server.key 1024 # 生成簽名請(qǐng)求的CSR文件 openssl req -new -key server.key -out server.csr # 自己對(duì)證書(shū)進(jìn)行簽名,簽名的有效期是365天 openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt # 去除證書(shū)文件的password cp server.key server.key.orig openssl rsa -in server.key.orig -out server.key
最終在建立HTTPS鏈接中使用的文件是
NodeJS建立一個(gè)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默認(rèn)de監(jiān)聽(tīng)端口時(shí)443,啟動(dòng)1000以下的端口時(shí)需要sudo權(quán)限 https.listen(443, function(err){ console.log("https listening on port: 443"); });
這里使用的fs.readFileSync方法會(huì)阻塞其他進(jìn)程直到文件的讀取完畢,在讀取關(guān)鍵的配置文件的時(shí)候這樣的方法是比較適宜的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。