上次介绍了如何通过第三方网站申请收费的 SSL 证书,但有效期只有三个月,三个月之后又须要再次申请,记得还好,如果忘了可能还会造成不必要的损失。
Let’s Encrypt 是一个收费提供的 SSL 证书的 CA,尽管每次签发的有效期都只有三个月,然而发证是自动化的,发证速度较快,并且能够通过脚本来主动续签,为集体网站应用 HTTPS 提供了一个不错的抉择。
Let’s Encrypt(以下简称 LE)的证书签发次要应用基于 ACME 协定 的证书主动治理客户端来实现。
LE 官网举荐的客户端是 Certbot,本文中就是应用 Certbot 来获取和续签证书。
LE 是如何主动签发证书的
假如当初要申请 CA 证书的域名是 example.com
。
首先由 WebServer(也就是咱们用户端的服务器)的治理客户端(如 Certbot)发送申请到 LE,让 LE 来验证客户端是否真的管制 example.com 这个域名,接下来 LE 会提出一些验证动作(原文 challenges),比方让客户端在一个很显著的门路上放指定的文件。同时,LE 还会收回一个随机数,客户端须要用这个随机数和客户端本人的私钥来进行签名。
WebServer 上的客户端实现 LE 指定的域名验证动作并且将加密后的签名后,再次发送申请到 LE 要求验证,LE 会验证发回来的签名是否正确,并且验证域名验证动作是否实现,如下载指定的文件并且判断文件外面的内容是否符合要求。
这些验证都实现当前,能够申请证书了。
实现验证后,客户端生成本人的私钥以及 Certificate Signing Request(CSR)发送到 LE 服务器,LE 服务器会将 CA 证书(也是公钥)发放到你的服务器。
这样就实现了 CA 证书的自动化发放了。
应用 Certbot 获取证书
LE 的 CA 证书发放原理看着还挺麻烦的,但如果应用 Certbot 客户端,整个过程还是挺简略的。
在正式获取证书之前,举荐先去 Certbot 官网抉择适宜本人的零碎环境。
我这边零碎环境是Nginx
+ Ubuntu 18.04 LTS
,所以上面介绍的装置流程只实用于Ubuntu + Nginx。
1. 装置 snap
snap) 是 Canonical 公司公布的全新的软件包治理形式,它相似一个容器领有一个应用程序所有的文件和库,各个应用程序之间齐全独立。应用 snap 包的益处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易治理。然而由此带来的问题就是它占用更多的磁盘空间。
$ sudo apt update
$ sudo apt install snapd
2. 装置 certbot
在装置 Certbot 之前,最好先移除历史快照。
$ sudo apt-get remove certbot
进行装置:
$ sudo snap install --classic certbot
3. 生成证书
装置实现之后,下一步须要做的就是生成证书了,这里有两种形式:
- 生成证书并主动配置
$ sudo certbot --nginx
- 生成证书手动配置
$ sudo certbot certonly --nginx
我抉择的是手动配置,大略流程如下:
- 输出罕用邮箱,用来接管告诉和复原密钥。
- 批准应用协定。
- 输出须要做受权的域名,多个域名用空格隔开。
- 期待验证通过。
如果其中某个域名验证失败,则不会生成明码。
一切正常的话,能够看到 /etc/letsencrypt/live/your_sites/
目录下多了四个文件:
cert.pem
:公钥,服务器证书chain.pem
:两头证书fullchain.pem
:前两个的合集privkey.pem
:私钥
其中配置 Nginx SSL 只须要用到fullchain.pem
和privkey.pem
:
server {
listen 443 ssl;
server_name www.example.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/www.exampl.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
...
}
至此,就曾经实现了生成证书到配置的全副过程了。
主动续签
如果快要到期了,能够应用 certbot renew
对证书进行更新,须要留神的是,如果证书尚未过期,则不会更新。
能够配合 conrtab
应用,每半个月的凌晨三点主动续签一次。
$ 0 3 15 * * certbot renew
参考链接
- Let’s Encrypt 收费 SSL 证书获取以及主动续签