最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解HTTPS 的原理和 NodeJS 的實(shí)現(xiàn)

 更新時(shí)間:2017年07月04日 11:04:28   作者:yeelan0319  
這篇文章主要介紹了詳解HTTPS 的原理和 NodeJS 的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

基本原理

HTTP協(xié)議采用明文傳輸數(shù)據(jù),當(dāng)涉及敏感信息的傳送時(shí),極有可能會(huì)受到竊聽或者中間人的攻擊。HTTPS是HTTP與SSL/TLS的組合,即使用加密通訊以及網(wǎng)絡(luò)服務(wù)器的身份鑒定來(lái)進(jìn)行信息的安全傳輸。其核心有二:

  1. 使用證書對(duì)服務(wù)器及請(qǐng)求端的身份驗(yàn)證
  2. 使用一組對(duì)稱秘鑰加密包括請(qǐng)求頭在內(nèi)的所有信息傳輸

握手流程

HTTPS鏈接的建立過(guò)程中涉及到服務(wù)器端證書、客戶端證書(可選)、服務(wù)器端的非對(duì)稱秘鑰以及后續(xù)通信過(guò)程中使用的對(duì)稱秘鑰幾個(gè)內(nèi)容。

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

下圖簡(jiǎn)要的說(shuō)明了這個(gè)流程的實(shí)現(xià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自簽名證書的生成

HTTPS中一個(gè)關(guān)鍵就是證書文件。當(dāng)然我們可以找專業(yè)的第三方機(jī)構(gòu)簽發(fā)。自己玩玩的話就用自簽名的證書就可以了,用戶在訪問的時(shí)候則需要確認(rè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ì)證書進(jìn)行簽名,簽名的有效期是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建立一個(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)聽端口時(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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Node.js使用supervisor進(jìn)行開發(fā)中調(diào)試的方法

    Node.js使用supervisor進(jìn)行開發(fā)中調(diào)試的方法

    今天小編就為大家分享一篇關(guān)于Node.js使用supervisor進(jìn)行開發(fā)中調(diào)試的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • nodejs遞歸文件夾獲取所有文件路徑實(shí)例

    nodejs遞歸文件夾獲取所有文件路徑實(shí)例

    這篇文章主要為大家介紹了nodejs遞歸文件夾獲取所有文件路徑實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Node.js中的HTTP模塊與URL模塊

    Node.js中的HTTP模塊與URL模塊

    這篇文章介紹了Node.js中的HTTP模塊與URL模塊,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 在Nodejs中實(shí)現(xiàn)一個(gè)緩存系統(tǒng)的方法詳解

    在Nodejs中實(shí)現(xiàn)一個(gè)緩存系統(tǒng)的方法詳解

    在數(shù)據(jù)庫(kù)查詢遇到瓶頸時(shí),我們通??梢圆捎镁彺鎭?lái)提升查詢速度,同時(shí)緩解數(shù)據(jù)庫(kù)壓力,在一些簡(jiǎn)單場(chǎng)景中,我們也可以自己實(shí)現(xiàn)一個(gè)緩存系統(tǒng),避免使用額外的緩存中間件,這篇文章將帶你一步步實(shí)現(xiàn)一個(gè)完善的緩存系統(tǒng),需要的朋友可以參考下
    2024-03-03
  • Node.js開發(fā)第三方微信公眾平臺(tái)

    Node.js開發(fā)第三方微信公眾平臺(tái)

    這篇文章主要介紹了Node.js開發(fā)第三方微信公眾平臺(tái)的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 深入理解Node module模塊

    深入理解Node module模塊

    這篇文章主要介紹了深入理解Node module模塊,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • node.js連接mongoDB數(shù)據(jù)庫(kù) 快速搭建自己的web服務(wù)

    node.js連接mongoDB數(shù)據(jù)庫(kù) 快速搭建自己的web服務(wù)

    這篇文章主要為大家詳細(xì)介紹了node.js連接mongoDB數(shù)據(jù)庫(kù),如何快速搭建自己的web服務(wù),感興趣的小伙伴們可以參考一下
    2016-04-04
  • 最新評(píng)論

    仁怀市| 马鞍山市| 托克托县| 四川省| 商南县| 公主岭市| 绍兴县| 扎囊县| 固始县| 湖南省| 井陉县| 黄石市| 安图县| 巫溪县| 定兴县| 镶黄旗| 姜堰市| 巩义市| 临猗县| 全南县| 洪江市| 合水县| 梁山县| 龙南县| 太谷县| 上虞市| 峨眉山市| 伊宁县| 南木林县| 沿河| 顺平县| 德令哈市| 安庆市| 吴江市| 淮北市| 高尔夫| 银川市| 龙门县| 江津市| 泗阳县| 醴陵市|