本篇为你讲解如何快速方便的为你的接口配置 https 证书,以 nginx 为例,向 Let’s Encrypt 获取免费的证书部署,并且到期自动更新证书。

1. 为什么要 https

https 是加密版本的 http 多了一个 s 表示 secure 安全性的增加,也就是数据在传输过程中是加密过的,不会被中间截取者查看到传输的数据内容。
当前如果你还使用 http 协议,浏览器会有个明显的提示 “不安全”,为了符合大趋势,更加专业,我们都应该使用 https 协议。

2. 在哪获取免费的 https 证书

要使用 https 协议,我们需要申请一个 SSL 证书,商业的 SSL 证书是很贵的,但是有很多免费的 SSL 证书提供商。Let’s Encrypt 就是其中一个非常流行的 SSL 提供商,它免费提供 SSL 证书,但是您应该注意,这些证书仅有效三个月

3. 怎么获取证书

Let’s Encrypt 有提供一个工具 Certbot 可以为你的网站自动获取证书、自动部署、自动更新,非常方便,一个命令就可以搞定一切,解放双手。

4. 安装 Certbot

可以访问他们的 网站 选择你的系统和使用的web容器,就会告诉你怎么安装了。
这里我们已 CentOS7 + Nginx 为例,为你讲解如何安装。
关于 Certbot 的安装,官方推荐的是使用 snapd 这个工具来安装,但是安装这个还是有点麻烦的,个人推荐使用 Python 的 pip 工具来安装,更加方便。

首先我们安装 pip3,注意,需要 Python3.6+

1
yum install -y python3-pip

然后使用 pip 安装 certbot 和 nginx部署工具

1
pip3 install certbot certbot-nginx -i https://mirrors.aliyun.com/pypi/simple/

用下面命令试下安装是否成功,有输出帮助内容说明就成功了
如果不行,请重开一下 SSH 窗口,或者重新登录下就行了。

1
certbot --help

5. 使用 Certbot 获取证书和部署

在获取证书前,你必须先在 nginx 中配置好你的域名,并且把域名指向这个服务器,否则无法获取到证书。你只需要在 nginx 中配置最简单的80端口就行了,举例如下:

1
2
3
4
5
6
7
8
server {
listen 80;
server_name test.easydoc.net;

location / {
root /etc/nginx/html;
}
}

然后使用如下命令获取证书并且自动部署到 nginx

1
certbot --nginx

--nginx表示部署到 nginx,它还支持--apache等参数,使用certbot --help 可以查看更多参数的使用帮助

如下图,它会让你选择需要为哪些域名获取证书,我们填写对应的数字就好了,多个用空格隔开,看到Congratulations! You have successfully enabled HTTPS表示成功了。输出的信息有告诉你证书在3个月后到期,已经为你添加了定时任务,在过期前会自动为你获取新的证书,再也不用担心证书过期。
certbot为nginx获取证书

现在我们再去看 nginx 的那个配置,就已经变成了下面这个样子,为你自动配置好了 https 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
server {
server_name test.easydoc.net;

location / {
root /etc/nginx/html;
}

listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/test.easydoc.net/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/test.easydoc.net/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
if ($host = test.easydoc.net) {
return 301 https://$host$request_uri;
} # managed by Certbot


listen 80;
server_name test.easydoc.net;
return 404; # managed by Certbot


}

如果你只想获取证书,不需要自动部署到 Nginx,你可以使用如下命令:

1
certbot certonly --nginx