【node.js】简单!原生node使用https,配置SSL,这么肝!

写在前面:大家好K。首先为你点进这篇有趣的文章点赞👍!文章在撰写过程中难免有疏漏和错误,欢迎你在下方留言指出文章的不足之处;如果觉得这篇文章对你有用,也欢迎你点赞和留下你的评论。更多内容请点进👉我的博客K。👈阅览。

本文重点从第二部分开始

1. 本文前提环境

  1. 要有个域名,SSL通常颁发给域名用的,但是IP也可以用,但是能申请的地方不多👉环度网信IP SSL申请(付费的!)

  2. 有服务器,本文示例用阿里云的云服务器

  3. 域名要解析到云服务器

2. 获取SSL证书

  1. 对于阿里云,在搜索框搜索ssl,点击进入ssl控制台

搜索ssl

  1. 点击购买证书

点击购买证书

  1. 个人使用选择个人版,这里以个人版作案例

立即购买

  1. 之后关于证书的配置保持默认就行,然后等待发放ssl证书

  2. 点击下载,下载nginx的证书(本文没有安装nginx环境,但也下载nginx的证书)

下载nginx证书

  1. 将下载到的证书(后缀为.key.pem)文件,上传到服务器任意一个目录(记住这个目录的路径),如果需要文件类型转换,只需使用OpenSSL命令
  • 将DER文件(.crt .cer .der)转换为PEM
openssl x509 -inform der -in 文件名.cer -out 文件名.pem
  • 将PEM文件转换为DER
openssl x509 -outform der -in 文件名.pem -out 文件名.der
  • 将PEM转换为CRT(.CRT文件)
openssl x509 -outform der -in 文件名.pem -out 文件名.crt

3. 加载SSL证书(重点)

我们可以看到https模块(👉官方文档)中,createServer()方法有一个[options]可选参数,这里就放两个证书文件

// options参数的数据类型是对象,所以先把文件读出来放在对象里
// 通过fs模块的readFileSync()方法读取内容
// 推荐使用绝对路径,原因在下面
const options = {
  key: fs.readFileSync('路径/文件名.key'),
  cert: fs.readFileSync('路径/文件名.pem')
};

// 在用createServer()方法创建服务时,把上面读出来的文件放进去
// 这里回调函数没写,完整代码在下下节
const server = https.createServer(options, 回调函数()=>{})

readFile()是异步的,也就是后面的代码不会等待文件读取完成,会跳过读取文件直接执行,这就导致运行createServer()时,options参数值还没准备好,所以不能用readFile()方法。

要使用同步的readFileSync()方法来读取文件,它是从上到下执行的,不会跳过读取文件这一步执行后面的代码。

推荐使用绝对路径,如果不使用绝对路径,可能出现一些问题,详细请见此文

学习更多异步的内容,请点击阅读此文

4. 启动服务器

// 启动服务
// 处理请求的代码写在回调函数中
server.on('request', (req, res) => {
	res.end('Hello world')
})

// https协议浏览器默认使用443端口
// 也可以设置其他端口号,那么用浏览器访问时需手动输入端口号
server.listen(443, () => {
    console.log('Started!')
})

用启动http服务的方式启动https服务和设置监听端口,这三步可以合成一步,请见下节。

5. 全部代码

// 启动https服务需要https包
// 读取文件需要fs包
const https = require('https');
const fs = require('fs');

// 将两个证书文件读取放到options对象中
// 使用readFileSync()方法,顺序地执行读文件和启动服务操作
const options = {
	key: fs.readFileSync('路径/文件名.key'),
	cert: fs.readFileSync('路径/文件名.pem')
};

// 创建服务器,启动服务器,设置监听端口号写在一起
https.createServer(options, (req, res) => {
	res.end('hello world\n');
}).listen(443);

结果截图

可以看到url前有个小锁,表示用了https协议

url前有个小锁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章