当前位置: 首页 > 科技观察

Node.js搭建HTTPS服务器

时间:2023-03-16 12:28:09 科技观察

在Node.js中开启一个HTTP服务非常简单。如果要使用Node.js开通HTTPS服务,需要两步:一是生成签名证书,二是使用Node.js提供的系统模块HTTPS完成。自签名证书通常用于企业的公共网络。证书通常由全球权威的CA机构颁发,受到各大浏览器厂商的信任。为了开发和测试时的简单,我们可以对证书进行自签名,但是这样在浏览器中打开时会提示安全问题。使用openssl工具生成自签名证书。简单分为以下几步:1、使用openssl的genrsa命令生成服务器私钥文件#genrsageneratekey#-out指定输出文件opensslgenrsa-outserver.key20482。生成证书请求文件#-new执行生成一个新的证书请求#-key指定输入的keyopensslreq-new-keyserver.key-outserver.csr#会有如下交互提示,CommonName可以自定义域名,只需修改hosts文件的域名映射即可。CountryName(2lettercode)[]:CNStateorProvinceName(fullname)[]:ShangHaiLocalityName(eg,city)[]:ShangHaiOrganizationName(eg,company)[]:Node.jsOrganizationalUnitName(eg,section)[]:CommonName(eg,fullyqualifiedhostname)[]:test.https.comEmailAddress[]:3.根据第2步的证书请求文件和第1步的服务器私钥文件生成证书#x509根据已有的证书请求生成自签名根证书#-days设置证书有效期#-in指定输入证书请求文件opensslx509-req-days365-inserver.csr-signkeyserver.key-outserver.crt成功后会生成以下三个文件:key是服务器上的私钥文件。csr是提交给证书颁发机构CA的证书请求签名文件。crt是证书颁发机构CA签名的证书。使用Node.js中的HTTPS模块开启服务比传统的HTTP方式多了一个options参数,保证上面生成的自签名证书和下面的文件是同一个目录。//app.jsconsthttps=require('https');constfs=require('fs');constPORT=8443;constoptions={key:fs.readFileSync('./server.key'),cert:fs.readFileSync('./server.crt')};https.createServer(options,(req,res)=>{res.writeHead(200);res.end('HelloWorld!');}).listen(PORT,()=>console.log(`Applisteningonport${PORT}!`));经测试,在Chrome85.0.4183.121版本中无法使用自签名证书。以下是在360浏览器中访问的截图。下面是在Safari中访问,虽然有提示,但是还是可以访问的。与Express框架一起使用经过上面两步的介绍,如果想在Express这样的框架中使用,也是非常简单的。以Express为例如下:fs.readFileSync('./server.key'),cert:fs.readFileSync('./server.crt')};https.createServer(options,app).listen(PORT,()=>console.log(`监听端口${PORT}!`));app.get('/',(req,res)=>res.send('HelloWorld!'));小结搭建一个HTTPS服务并不难。Node.js为我们提供了HTTPS模块,可以轻松完成这项工作。如果我们在本地测试,可以使用openssl工具生成自签名证书。另外,阿里云等一些云服务商也提供一些免费的证书,也可以使用。本文转载自微信公众号《Nodejs技术栈》,可通过以下二维码关注。转载本文请联系Nodejs技术栈公众号。