折腾了一阵,实现了将已有项目迁至HTTPS。下面是主要步骤。
1. 环境:
- Win 10
- Node.js : v8.9.4
- Npm : 6.9.0
2. 准备工作
由于是将已有项目迁移至HTTPS, 因此本文不涉及初始化和创建项目,默认在已有项目的入口,本文是对 index.js
来进行操作。
2.1 安装express
npm install express
2.2 安装openssl
有的git版本自带openssl,但是我的没有,所以要先安装。安装步骤如下:
- 在链接 https://code.google.com/p/openssl-for-windows/downloads/detail?name=openssl-0.9.8k_WIN32.zip 之中下载openssl,我用的是最新版本。
- 解压并且添加bin目录到
Path
变量下。 - 创建环境变量 variable name =
OPENSSL_CONF
, variable value =openssl.cnf的位置
3. 生成密钥与使用密钥
3.1 生成密钥
下面步骤建议在cmd之中使用管理员模式,实测不使用管理员模式也会生成密钥,但是cmd会报错。
openssl genrsa -out pk.pem 1024
: 此命令生成私钥 Private keypk.pem
openssl req -new -key pk.pem -out certreq.csr
: 此命令通过 Private Key 生成 CSR 证书签名certreq.csr
。在这个步骤之中,要输入一些用于生成 CSR 的信息, 比如国家等等。openssl x509 -req -in certreq.csr -signkey pk.pem -out certificate.pem
: 此命令通过私钥和 CSR 证书签名生成证书文件certificate.pem
。
3.2 在 index.js
之中插入密钥
此处参考了https://www.cnblogs.com/handongyu/p/6260209.html的文章,表示感谢
var app = require('express')();
var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey = fs.readFileSync('/pk.pem', 'utf8');
var certificate = fs.readFileSync('/certificate.pem', 'utf8');
var credentials = {key: privateKey, cert: certificate};
var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);
var PORT = 18080;
var SSLPORT = 18081;
httpServer.listen(PORT, function() {
console.log('HTTP Server is running on: http://localhost:%s', PORT);
});
httpsServer.listen(SSLPORT, function() {
console.log('HTTPS Server is running on: https://localhost:%s', SSLPORT);
});
// Welcome
app.get('/', function(req, res) {
if(req.protocol === 'https') {
res.status(200).send('Welcome to Safety Land!');
}
else {
res.status(200).send('Welcome!');
}
});
服务器启动之后可以点击console的两个链接比较HTTP 和 HTTPS 的不同, 同时使用fiddler抓包提示已经HTTPS 加密,成功。