欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js進(jìn)階之核心模塊https入門

 更新時(shí)間:2018年05月23日 09:12:13   作者:程序猿小卡的博客  
在nodejs中,提供了 https 這個(gè)模塊來(lái)完成 HTTPS 相關(guān)功能。這篇文章主要介紹了Node.js進(jìn)階之核心模塊https入門,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

模塊概覽

這個(gè)模塊的重要性,基本不用強(qiáng)調(diào)了。在網(wǎng)絡(luò)安全問(wèn)題日益嚴(yán)峻的今天,網(wǎng)站采用HTTPS是個(gè)必然的趨勢(shì)。

在nodejs中,提供了 https 這個(gè)模塊來(lái)完成 HTTPS 相關(guān)功能。從官方文檔來(lái)看,跟 http 模塊用法非常相似。

本文主要包含兩部分:

  1. 通過(guò)客戶端、服務(wù)端的例子,對(duì)https模塊進(jìn)行入門講解。
  2. 如何訪問(wèn)安全證書不受信任的網(wǎng)站。(以 12306 為例子)

篇幅所限,本文無(wú)法對(duì) HTTPS協(xié)議 及 相關(guān)技術(shù)體系 做過(guò)多講解,有問(wèn)題歡迎留言交流。

客戶端例子

跟http模塊的用法非常像,只不過(guò)請(qǐng)求的地址是https協(xié)議的而已,代碼如下:

var https = require('https');

https.get('https://www.baidu.com', function(res){
  console.log('status code: ' + res.statusCode);
  console.log('headers: ' + res.headers);

  res.on('data', function(data){
    process.stdout.write(data);
  });
}).on('error', function(err){
  console.error(err);
});

服務(wù)端例子

對(duì)外提供HTTPS服務(wù),需要有HTTPS證書。如果你已經(jīng)有了HTTPS證書,那么可以跳過(guò)證書生成的環(huán)節(jié)。如果沒(méi)有,可以參考如下步驟

生成證書

1、創(chuàng)建個(gè)目錄存放證書。

mkdir cert
cd cert

2、生成私鑰。

openssl genrsa -out chyingp-key.pem 2048

3、生成證書簽名請(qǐng)求(csr是 Certificate Signing Request的意思)。

openssl req -new \
 -sha256
 -key chyingp-key.key.pem \
 -out chyingp-csr.pem \
 -subj "/C=CN/ST=Guandong/L=Shenzhen/O=YH Inc/CN=www.chyingp.com"

4、生成證書。

openssl x509 \
 -req -in chyingp-csr.pem \
 -signkey chyingp-key.pem \
 -out chyingp-cert.pem

HTTPS服務(wù)端

代碼如下:

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

var options = {
  key: fs.readFileSync('./cert/chyingp-key.pem'), // 私鑰
  cert: fs.readFileSync('./cert/chyingp-cert.pem') // 證書
};

var server = https.createServer(options, function(req, res){
  res.end('這是來(lái)自HTTPS服務(wù)器的返回');
});

server.listen(3000);

由于我并沒(méi)有 www.chyingp.com 這個(gè)域名,于是先配置本地host

127.0.0.1 www.chyingp.com

啟動(dòng)服務(wù),并在瀏覽器里訪問(wèn) http://www.chyingp.com:3000 。注意,瀏覽器會(huì)提示你證書不可靠,點(diǎn)擊 信任并繼續(xù)訪問(wèn) 就行了。

進(jìn)階例子:訪問(wèn)安全證書不受信任的網(wǎng)站

這里以我們最喜愛(ài)的12306最為例子。當(dāng)我們通過(guò)瀏覽器,訪問(wèn)12306的購(gòu)票頁(yè)面 https://kyfw.12306.cn/otn/regist/init 時(shí),chrome會(huì)阻止我們?cè)L問(wèn),這是因?yàn)椋?2306的證書是自己頒發(fā)的,chrome無(wú)法確認(rèn)他的安全性。

對(duì)這種情況,可以有如下處理方式:

  1. 停止訪問(wèn):著急搶票回家過(guò)年的老鄉(xiāng)表示無(wú)法接受。
  2. 無(wú)視安全警告,繼續(xù)訪問(wèn):大部分情況下,瀏覽器是會(huì)放行的,不過(guò)安全提示還在。
  3. 導(dǎo)入12306的CA根證書:瀏覽器乖乖就范,認(rèn)為訪問(wèn)是安全的。(實(shí)際上還是有安全提示,因?yàn)?2306用的簽名算法安全級(jí)別不夠)

例子:觸發(fā)安全限制

同樣的,通過(guò) node https client 發(fā)起請(qǐng)求,也會(huì)遇到同樣問(wèn)題。我們做下實(shí)驗(yàn),代碼如下:

var https = require('https');

https.get('https://kyfw.12306.cn/otn/regist/init', function(res){  
  res.on('data', function(data){
    process.stdout.write(data);
  });
}).on('error', function(err){
  console.error(err);
});

運(yùn)行上面代碼,得到下面的錯(cuò)誤提示,意思是 安全證書不可靠,拒絕繼續(xù)訪問(wèn)。

{ Error: self signed certificate in certificate chain
    at Error (native)
    at TLSSocket.<anonymous> (_tls_wrap.js:1055:38)
    at emitNone (events.js:86:13)
    at TLSSocket.emit (events.js:185:7)
    at TLSSocket._finishInit (_tls_wrap.js:580:8)
    at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:412:38) code: 'SELF_SIGNED_CERT_IN_CHAIN' }

ps:個(gè)人認(rèn)為這里的錯(cuò)誤提示有點(diǎn)誤導(dǎo)人,12306網(wǎng)站的證書并不是自簽名的,只是對(duì)證書簽名的CA是12306自家的,不在可信列表里而已。自簽名證書,跟自己CA簽名的證書還是不一樣的。

類似在瀏覽器里訪問(wèn),我們可以采取如下處理:

  1. 不建議:忽略安全警告,繼續(xù)訪問(wèn);
  2. 建議:將12306的CA加入受信列表;

方法1:忽略安全警告,繼續(xù)訪問(wèn)

非常簡(jiǎn)單,將 rejectUnauthorized 設(shè)置為 false 就行,再次運(yùn)行代碼,就可以愉快的返回頁(yè)面了。

// 例子:忽略安全警告
var https = require('https');
var fs = require('fs');

var options = { 
  hostname: 'kyfw.12306.cn',
  path: '/otn/leftTicket/init',
  rejectUnauthorized: false // 忽略安全警告
};

var req = https.get(options, function(res){ 
  res.pipe(process.stdout);  
});

req.on('error', function(err){
  console.error(err.code);
});

方法2:將12306的CA加入受信列表

這里包含3個(gè)步驟:

  1. 下載 12306 的CA證書
  2. 將der格式的CA證書,轉(zhuǎn)成pem格式
  3. 修改node https的配置

1、下載 12306 的CA證書

在12306的官網(wǎng)上,提供了CA證書的 下載地址 ,將它保存到本地,命名為 srca.cer。

2、將der格式的CA證書,轉(zhuǎn)成pem格式

https初始化client時(shí),提供了 ca 這個(gè)配置項(xiàng),可以將 12306 的CA證書添加進(jìn)去。當(dāng)你訪問(wèn) 12306 的網(wǎng)站時(shí),client就會(huì)用ca配置項(xiàng)里的 ca 證書,對(duì)當(dāng)前的證書進(jìn)行校驗(yàn),于是就校驗(yàn)通過(guò)了。

需要注意的是,ca 配置項(xiàng)只支持 pem 格式,而從12306官網(wǎng)下載的是der格式的。需要轉(zhuǎn)換下格式才能用。關(guān)于 pem、der的區(qū)別,可參考 這里 。

openssl x509 -in srca.cer -inform der -outform pem -out srca.cer.pem

3、修改node https的配置

修改后的代碼如下,現(xiàn)在可以愉快的訪問(wèn)12306了。

// 例子:將12306的CA證書,加入我們的信任列表里
var https = require('https');
var fs = require('fs');
var ca = fs.readFileSync('./srca.cer.pem');

var options = { 
 hostname: 'kyfw.12306.cn',
 path: '/otn/leftTicket/init',
 ca: [ ca ]
};

var req = https.get(options, function(res){ 
 res.pipe(process.stdout); 
});

req.on('error', function(err){
 console.error(err.code);
});

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 輕松創(chuàng)建nodejs服務(wù)器(6):作出響應(yīng)

    輕松創(chuàng)建nodejs服務(wù)器(6):作出響應(yīng)

    這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(6):作出響應(yīng),我們接著改造服務(wù)器,讓請(qǐng)求處理程序能夠返回一些有意義的信息,需要的朋友可以參考下
    2014-12-12
  • nvm報(bào)錯(cuò)Now?using?node?v版本號(hào)(64-bit)圖文解決方法

    nvm報(bào)錯(cuò)Now?using?node?v版本號(hào)(64-bit)圖文解決方法

    這篇文章主要給大家介紹了關(guān)于nvm報(bào)錯(cuò)Now?using?node?v版本號(hào)(64-bit)的解決方法,文中將解決的辦法介紹的非常詳細(xì),對(duì)遇到這個(gè)問(wèn)題的朋友具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • Node.js使用NodeMailer發(fā)送郵件實(shí)例代碼

    Node.js使用NodeMailer發(fā)送郵件實(shí)例代碼

    本篇文章主要介紹了Node.js使用NodeMailer發(fā)送郵件實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-03-03
  • Node.js API詳解之 assert模塊用法實(shí)例分析

    Node.js API詳解之 assert模塊用法實(shí)例分析

    這篇文章主要介紹了Node.js API詳解之 assert模塊用法,結(jié)合實(shí)例形式分析了Node.js API中assert模塊基本函數(shù)、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • 詳解node服務(wù)器中打開html文件的兩種方法

    詳解node服務(wù)器中打開html文件的兩種方法

    本篇文章主要介紹了詳解node服務(wù)器中打開html文件的兩種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • MQTT Client實(shí)現(xiàn)消息推送功能的方法詳解

    MQTT Client實(shí)現(xiàn)消息推送功能的方法詳解

    這篇文章主要介紹了MQTT Client實(shí)現(xiàn)消息推送功能的方法,結(jié)合實(shí)例形式詳細(xì)分析了MQTT Client實(shí)現(xiàn)消息推送的基本原理、實(shí)現(xiàn)方法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2023-05-05
  • Express的HTTP重定向到HTTPS的方法

    Express的HTTP重定向到HTTPS的方法

    本篇文章主要介紹了Express的HTTP重定向到HTTPS的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • nodejs結(jié)合Socket.IO實(shí)現(xiàn)的即時(shí)通訊功能詳解

    nodejs結(jié)合Socket.IO實(shí)現(xiàn)的即時(shí)通訊功能詳解

    這篇文章主要介紹了nodejs結(jié)合Socket.IO實(shí)現(xiàn)的即時(shí)通訊功能,結(jié)合實(shí)例形式詳細(xì)分析了nodejs結(jié)合Socket.IO實(shí)現(xiàn)即時(shí)通訊的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-01-01
  • Yapi安裝部署詳細(xì)圖文教程

    Yapi安裝部署詳細(xì)圖文教程

    YApi 是一個(gè)可本地部署的、打通前后端及QA的、可視化的接口管理平臺(tái),下面這篇文章主要給大家介紹了關(guān)于Yapi安裝部署的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • npm與node版本不匹配問(wèn)題解決思路及方法

    npm與node版本不匹配問(wèn)題解決思路及方法

    當(dāng)nodejs和npm的版本不匹配時(shí),會(huì)出現(xiàn)一些奇怪的報(bào)錯(cuò),這是因?yàn)閚pm與nodejs版本不兼容導(dǎo)致的,這篇文章主要給大家介紹了關(guān)于npm與node版本不匹配問(wèn)題解決思路及方法的相關(guān)資料,需要的朋友可以參考下
    2023-11-11

最新評(píng)論