https://juejin.cn/post/6916373360515497991
1. 概述
首先需要获取https证书,将https证书和网站域名进行绑定,就可以通过https访问网站了。
2. 证书获取
https证书有4种,这里我们只介绍最简单并且免费的,域名证书。
1. 阿里云获取证书
如果你的域名是阿里云购买的那就简单了,登录阿里云在搜索栏搜索ssl证书,选中ssl证书(应用安全)控制台,打开证书列表页面。

在证书列表页面,点击购买证书。

2021年起阿里云证书将以资源包的形式开放(说实话,更麻烦了),需要点击证书资源包中进行下单。

选择免费证书扩容包20个,支付金额为0元,下单就可以了。

选择左侧证书资源包选项卡,然后在剩余证书数量中点击证书申请。

申请一个。

在下面新增的这条信息中点击申请证书,会要求填写一些信息,比如网站域名,证书所有人。

登记之后就会出现下载按钮,在弹出的弹框中选择需要对应的环境就可以了,一般我这里下载的证书会配置在nginx中,所以下载nginx的。

这样我们下载下来的文件夹中就会包含key和pem两个文件。

2. mkcert获取证书
通过本地服务自动生成。首先需要安装mkcert模块。
npm install -g mkcert复制代码
通过下面代码生成证书的公钥和私钥,也就是key和pem。
const mkcert = require('mkcert');const fs = require('fs');const start = async () => {const ca = await mkcert.createCA({organization: 'Hello CA',countryCode: 'NP',state: 'Bagmati',locality: 'Kathmandu',validityDays: 365});// then create a tls certificateconst cert = await mkcert.createCert({domains: ['127.0.0.1', 'localhost'], // 域名地址validityDays: 365,caKey: ca.key,caCert: ca.cert});fs.writeFile(`${__dirname}/test.key`,cert.key, (error) => {console.log(error)});fs.writeFile(`${__dirname}/test.pem`,cert.cert, (error) => {console.log(error)});}start();复制代码
执行之后就可以在写入的文件位置${__dirname}/test.key找到生成的一对证书。
3. mkcert工具获取证书
mkcert工具,区别于npm工具,注意和npm的mkcert进行区分,同时安装两个工具会造成使用冲突。
首先使用brew安装mkcert工具,然后初始化安装CA的根证书。最后使用mkcert生成域名证书就可以了。同样会在本地生成key和pem两个文件。
# 安装mkcertbrew install mkcert# 安装根证书mkcert ---install# 生成本地签名,假设域名为zhiqianduan.commkcert zhiqianduan.com复制代码
3. 证书使用
1. nginx 服务
将下载好的key和pem文件放在自己需要的位置,我一般是习惯在nginx的配置目录中新建一个certs的文件夹存放他们。

修改nginx配置文件
vi /usr/local/nginx/conf/nginx.conf复制代码
https使用的是443端口号,默认情况下nginx是注释了这块代码区域的,记得放开,然后将key和pem分别配置在ssl_certificate和ssl_certificate_key中,注意后面的路径,我这里nginx.conf和certs文件夹在同一个目录,所以我使用/certs/xxxx.key找到文件。

重启nginx就可以使用https访问了。
nginx -s reload复制代码
2. node
首先需要安装https模块。
npm install https --save-dev复制代码
使用https创建服务,使用方式和http模块基本一致,不过需要传入key和pem,最后监听的端口是443。
const https = require('https');const fs = require('fs');const app = https.createServer({key: fs.readFileSync('./xxxx.key'),cert: fs.readFileSync('./xxxx.pem')}, (req, res) => {res.writeHead(200, {'Content-Type': 'text/plain'});res.end('https');}).listen(443, '0.0.0.0');复制代码
3. 最后
至此网站升级https就做完了,说实话我还是倾向于第一种nginx的方式,无论你是搭建企业应用还是个人博客,nginx都是不可缺少的。或许很多人觉得nginx距离前端很远是运维的东西,其实不然,他时时刻刻都在我们身边。用户访问网站所经过的第一关就是nginx。
作者:隐冬
链接:https://juejin.cn/post/6916373360515497991
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
