Skip to content

HTTPS 提供了安全、可靠的传输,市面上大部分 Web 应用都是采取的 HTTPS 传输协议,其 传输报文会经过 RSA 非对称加密,使得报文不会被窃取。

生成 SSL 证书

node 提供了 https 模块,可以用来创建基于 HTTPS 协议的接口,其 API 和 http 模块非 常类似,但在使用 createServer 创建服务器时需要配置 SSL 证书。

不被受信的证书

我们可以使用OpenSSL来生成我们的密钥,在 windows 系统中:

  1. 在需要创建证书的目录中右键打开菜单上下文,点击Git Bash Here
  2. 输入openssl genrsa -out privkey.pem 1024/2048来生成 private.pem 文件
  3. 使用 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)