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 certificate
const 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
两个文件。
# 安装mkcert
brew install mkcert
# 安装根证书
mkcert ---install
# 生成本地签名,假设域名为zhiqianduan.com
mkcert 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
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。