Appearance
HTTPS 提供了安全、可靠的传输,市面上大部分 Web 应用都是采取的 HTTPS 传输协议,其 传输报文会经过 RSA 非对称加密,使得报文不会被窃取。
生成 SSL 证书
node 提供了 https 模块,可以用来创建基于 HTTPS 协议的接口,其 API 和 http 模块非 常类似,但在使用 createServer 创建服务器时需要配置 SSL 证书。
不被受信的证书
我们可以使用OpenSSL
来生成我们的密钥,在 windows 系统中:
- 在需要创建证书的目录中右键打开菜单上下文,点击
Git Bash Here
- 输入
openssl genrsa -out privkey.pem 1024/2048
来生成private.pem
文件 - 使用
private.pem
文件来生成证书,openssl req -new -x509 -key privkey.pem -out server.pem -days 365
,会生成server.pem
文件
在第二步中报错如果出现提示:genrsa: Can't parse "1024/2048" as a number,请删除命令最后面的/2048再重新执行
可以被受信的证书
可以了解下let's encrypt
。
创建HTTPS服务器
首先先创建配置证书的对象,然后使用createServer
即可创建HTTPS服务器
js
const { createServer } = require('https')
const { readFileSync } = require('fs')
const { resolve } = require('path')
const keyPath = resolve(__dirname, './config/pem-key')
const options = {
key: readFileSync(resolve(keyPath, './privkey.pem')),// 私钥的路径
cert: readFileSync(resolve(keyPath, './server.pem')) // 证书的路径
}
createServer(options, (req, res) => {
res.setHeader('content-type', 'text/html')
res.end(`<h1>Hello,HTTPS!</h1>`)
}).listen(443)
const { createServer } = require('https')
const { readFileSync } = require('fs')
const { resolve } = require('path')
const keyPath = resolve(__dirname, './config/pem-key')
const options = {
key: readFileSync(resolve(keyPath, './privkey.pem')),// 私钥的路径
cert: readFileSync(resolve(keyPath, './server.pem')) // 证书的路径
}
createServer(options, (req, res) => {
res.setHeader('content-type', 'text/html')
res.end(`<h1>Hello,HTTPS!</h1>`)
}).listen(443)