生成CA证书
- 创建CA证书私钥
openssl genrsa -out ca-key.pem -des 1024
- 通过CA私钥生成CSR
openssl req -new -key ca-key.pem -out ca-csr.pem
- 通过私钥和CSR生成CA证书
openssl x509 -req -in ca-csr.pem -signkey ca-key.pem -out ca-cert.pem -days 1095
- 检测CA证书是否正常
openssl x509 -in ca-cert.pem -noout -text
创建服务端或者客户端证书
- 创建私钥
openssl genrsa -out server-key.pem 1024
- 根据私钥生成CSR
openssl req -new -key server-key.pem -out server-csr.pem
- 创建extfile, 文件内容如下:
[v3_req]
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
# 注意这个IP.1的设置,IP地址需要和你的服务器的监听地址一样
DNS.1 = localhost
DNS.2 = 127.0.0.1
DNS.3 = m.asyncoder.com
注意DNS.3为你的域名信息,保持和步骤2里面的Common Name一致
- 通过私钥和CSR生成自签名证书
openssl x509 -req -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -in server-csr.pem -out server-cert.pem -extensions v3_req -extfile extfile -days 1095
证书打包
一般服务器部署需要的SSL证书,我们直接用server-cert.pem
和server-key.pem
即可,但是在Node.js上为了开发方便,我们可以把证书进行合并。合并时,请记住输入的密码。
openssl pkcs12 -export -in server-cert.pem -inkey server-key.pem -certfile ca-cert.pem -out server.pfx
导入证书到操作系统
Windows上将
ca-cert.pem
改为ca-cert.cer
, 点击导入到受信任的根证书颁发机构
即可Mac上直接安装
ca-cert.cer
即可
Node.js测试
const https = require('https')
const fs = require('fs')
const options = {
pfx:fs.readFileSync('./server.pfx'),
passphrase:'your password' // 生成server.pfx时需要的密码
};
https.createServer(options, (req, res) => {
res.writeHead(200)
res.end('hello world\n')
}).listen(443,'127.0.0.1')
用Chrome访问https://localhost, 可以看到左上角绿色的锁,页面显示为hello world