使用Node.js搭建https服务器
一、引言
https是是http的安全版本,在http的基础上通过传输加密和身份认证保证了传输过程中的安全性。可以认为:https = http + tls/ssl。本文讲述使用Node.js搭建https服务器的方法。
二、编译OpenSSL
按照《Openssl在Linux下编译/交叉编译》,编译出OpenSSL的库和可执行文件:
直接执行./openssl会报错,提示找不到动态库,所以得设置环境变量:
设置环境变量。其中,“/home/cjc/source/openssl-3.4.0-alpha1/install/lib64”为我本机编译出来的OpenSSL动态库的路径:
export LD_LIBRARY_PATH=/home/cjc/source/openssl-3.4.0-alpha1/install/lib64:$LD_LIBRARY_PATH
三、 生成公钥/私钥/证书
进入编译出的OpenSSL可执行文件的所在目录。生成传统的 RSA 私钥2048位,输出到rsa_private_key.pem文件:
openssl genrsa -out rsa_private_key.pem 2048
生成 RSA公钥rsa_public_key.pem:
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
生成证书签名请求csr.pem:
openssl req -new -key rsa_private_key.pem -out csr.pem
使用CSR和私钥生成自签名证书cert.pem:
openssl x509 -req -days 365 -in csr.pem -signkey rsa_private_key.pem -out cert.pem
执行上述命令后,可以看到确实生成了公钥、私钥和证书:
四、安装Node.js
按照《Ubuntu下安装Node.js》安装Node.js
五、编写Node.js程序
server.js:
'use strict'var https = require('https');
var fs = require('fs');var options = {key : fs.readFileSync('/home/cjc/source/openssl-3.4.0-alpha1/install/bin/rsa_private_key.pem'),cert : fs.readFileSync('/home/cjc/source/openssl-3.4.0-alpha1/install/bin/cert.pem')
}var app = https.createServer(options ,function(req,res){res.writeHead(200, {'Content-Type':'text/plain'});res.end('Hello World\n');
}).listen(443,'0.0.0.0');console.log('Server running at https://127.0.0.1:443');
上述代码中,options里面的key指定私钥的位置,cert指定自签名证书的位置。
使用node命令执行以上代码:
浏览器输入:https://192.168.0.104/
192.168.0.104是我htts服务器所在电脑的IP。可以看到htts服务器创建成功了,用浏览器可以访问: