https://juejin.cn/post/6916373360515497991

1. 概述

首先需要获取https证书,将https证书和网站域名进行绑定,就可以通过https访问网站了。

2. 证书获取

https证书有4种,这里我们只介绍最简单并且免费的,域名证书。

1. 阿里云获取证书

如果你的域名是阿里云购买的那就简单了,登录阿里云在搜索栏搜索ssl证书,选中ssl证书(应用安全)控制台,打开证书列表页面。

网站开启https的几种方式 - 图1

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

网站开启https的几种方式 - 图2

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

网站开启https的几种方式 - 图3

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

网站开启https的几种方式 - 图4

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

网站开启https的几种方式 - 图5

申请一个。

网站开启https的几种方式 - 图6

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

网站开启https的几种方式 - 图7

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

网站开启https的几种方式 - 图8

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

网站开启https的几种方式 - 图9

2. mkcert获取证书

通过本地服务自动生成。首先需要安装mkcert模块。

  1. npm install -g mkcert
  2. 复制代码

通过下面代码生成证书的公钥和私钥,也就是keypem

  1. const mkcert = require('mkcert');
  2. const fs = require('fs');
  3. const start = async () => {
  4. const ca = await mkcert.createCA({
  5. organization: 'Hello CA',
  6. countryCode: 'NP',
  7. state: 'Bagmati',
  8. locality: 'Kathmandu',
  9. validityDays: 365
  10. });
  11. // then create a tls certificate
  12. const cert = await mkcert.createCert({
  13. domains: ['127.0.0.1', 'localhost'], // 域名地址
  14. validityDays: 365,
  15. caKey: ca.key,
  16. caCert: ca.cert
  17. });
  18. fs.writeFile(`${__dirname}/test.key`,cert.key, (error) => {
  19. console.log(error)
  20. });
  21. fs.writeFile(`${__dirname}/test.pem`,cert.cert, (error) => {
  22. console.log(error)
  23. });
  24. }
  25. start();
  26. 复制代码

执行之后就可以在写入的文件位置${__dirname}/test.key找到生成的一对证书。

3. mkcert工具获取证书

mkcert工具,区别于npm工具,注意和npmmkcert进行区分,同时安装两个工具会造成使用冲突。

首先使用brew安装mkcert工具,然后初始化安装CA的根证书。最后使用mkcert生成域名证书就可以了。同样会在本地生成keypem两个文件。

  1. # 安装mkcert
  2. brew install mkcert
  3. # 安装根证书
  4. mkcert ---install
  5. # 生成本地签名,假设域名为zhiqianduan.com
  6. mkcert zhiqianduan.com
  7. 复制代码

3. 证书使用

1. nginx 服务

将下载好的keypem文件放在自己需要的位置,我一般是习惯在nginx的配置目录中新建一个certs的文件夹存放他们。

网站开启https的几种方式 - 图10

修改nginx配置文件

  1. vi /usr/local/nginx/conf/nginx.conf
  2. 复制代码

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

网站开启https的几种方式 - 图11

重启nginx就可以使用https访问了。

  1. nginx -s reload
  2. 复制代码

2. node

首先需要安装https模块。

  1. npm install https --save-dev
  2. 复制代码

使用https创建服务,使用方式和http模块基本一致,不过需要传入keypem,最后监听的端口是443

  1. const https = require('https');
  2. const fs = require('fs');
  3. const app = https.createServer({
  4. key: fs.readFileSync('./xxxx.key'),
  5. cert: fs.readFileSync('./xxxx.pem')
  6. }, (req, res) => {
  7. res.writeHead(200, {'Content-Type': 'text/plain'});
  8. res.end('https');
  9. }).listen(443, '0.0.0.0');
  10. 复制代码

3. 最后

至此网站升级https就做完了,说实话我还是倾向于第一种nginx的方式,无论你是搭建企业应用还是个人博客,nginx都是不可缺少的。或许很多人觉得nginx距离前端很远是运维的东西,其实不然,他时时刻刻都在我们身边。用户访问网站所经过的第一关就是nginx

作者:隐冬
链接:https://juejin.cn/post/6916373360515497991
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。