上次介绍了如何通过第三方网站申请收费的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. 生成证书

装置实现之后,下一步须要做的就是生成证书了,这里有两种形式:

  1. 生成证书并主动配置
$ sudo certbot --nginx
  1. 生成证书手动配置
$ sudo certbot certonly --nginx

我抉择的是手动配置,大略流程如下:

  1. 输出罕用邮箱,用来接管告诉和复原密钥。
  2. 批准应用协定。
  3. 输出须要做受权的域名,多个域名用空格隔开。
  4. 期待验证通过。

如果其中某个域名验证失败,则不会生成明码。

一切正常的话,能够看到/etc/letsencrypt/live/your_sites/目录下多了四个文件:

  • cert.pem : 公钥,服务器证书
  • chain.pem : 两头证书
  • fullchain.pem : 前两个的合集
  • privkey.pem : 私钥

其中配置Nginx SSL 只须要用到fullchain.pemprivkey.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证书获取以及主动续签