网站开启https的几种方式

4,451 阅读3分钟

1. 概述

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

2. 证书获取

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

1. 阿里云获取证书

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

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

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

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

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

申请一个。

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

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

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

2. mkcert获取证书

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

npm install -g mkcert

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

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工具,注意和npmmkcert进行区分,同时安装两个工具会造成使用冲突。

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

# 安装mkcert
brew install mkcert
# 安装根证书
mkcert ---install
# 生成本地签名,假设域名为zhiqianduan.com
mkcert zhiqianduan.com

3. 证书使用

1. nginx 服务

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

修改nginx配置文件

vi /usr/local/nginx/conf/nginx.conf

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

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

nginx -s reload

2. node

首先需要安装https模块。

npm install https --save-dev

使用https创建服务,使用方式和http模块基本一致,不过需要传入keypem,最后监听的端口是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