欢迎进群交流,群号197339705。模块概述这个模块的重要性基本不用强调。在网络安全问题日益严峻的今天,网站采用HTTPS是必然趋势。在nodejs中,提供了https模块来完成HTTPS的相关功能。从官方文档看,和http模块的用法很相似。本文主要包括两个部分:通过客户端和服务端的例子介绍https模块。如何访问具有不受信任的安全证书的网站。(以12306为例)限于篇幅,本文无法对HTTPS协议及相关技术体系进行过多的讲解。有问题欢迎留言交流。客户端示例与http模块的用法非常相似,只是请求的地址是https协议下的。代码如下:varhttps=require('https');https.get('https://www.baidu.com',function(res){console.log('状态码:'+res.statusCode);console.log('headers:'+res.headers);res.on('data',function(data){process.stdout.write(data);});}).on('error',函数(错误){console.error(错误);});服务器示例对外提供HTTPS服务,需要HTTPS证书。如果您已经拥有HTTPS证书,则可以跳过证书生成过程。如果没有,可以参考以下步骤生成证书1.创建一个目录来存放证书。mkdircertcdcert2,生成私钥。opensslgenrsa-outchyingp-key.pem20483。生成证书签名请求(csr表示证书签名请求)。opensslreq-new\-sha256-keychyingp-key.key.pem\-outchyingp-csr.pem\-subj"/C=CN/ST=Guandong/L=Shenzhen/O=YHInc/CN=www.chyingp.com”4.生成证书。opensslx509\-req-inchyingp-csr.pem\-signkeychyingp-key.pem\-outchyingp-cert.pemHTTPS服务器代码如下:varhttps=require('https');varfs=require('fs');varoptions={key:fs.readFileSync('./cert/chyingp-key.pem'),//私钥cert:fs.readFileSync('./cert/chyingp-cert.pem')//Certificate};varserver=https.createServer(options,function(req,res){res.end('这是HTTPS服务器返回的');});server.listen(3000);因为我不知道'没有www。域名chyingp.com,所以首先配置本地host127.0.0.1www.chyingp.com启动服务,在浏览器中访问http://www.chyingp.com:3000。注意浏览器会提示证书不可靠,点击信任继续访问即可。进阶范例:访问安全证书不受信任的网站这里我们以我们最喜欢的12306为例。当我们通过浏览器访问12306的购票页面https://kyfw.12306.cn/otn/reg...时,chrome会阻止我们访问,因为12306的证书是自己颁发的,chrome无法确认他的安全。对于这种情况,有以下几种处理方式:停止拜访:急着抢票回家过年的老乡们表示不能接受。忽略安全警告继续访问:大多数情况下,浏览器会允许,但安全提示依然存在。导入12306的CA根证书:浏览器乖乖提交,认为访问安全。(其实还是有安全提醒的,因为12306使用的签名算法不够安全。)例子:触发安全限制同理,如果通过节点https客户端发起请求,也会遇到同样的问题。我们来做个实验,代码如下:varhttps=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);});运行上面的代码,得到如下错误信息,表示安全证书不可靠,访问被拒绝。{错误:证书链中的自签名证书在TLSSocket处出现错误(本机)。
