上次介绍了如何经过第三方网站申请免费的SSL 证书,但有效期只有三个月,三个月以后又须要再次申请,记得还好,若是忘了可能还会形成没必要要的损失。php
Let's Encrypt 是一个免费提供的SSL 证书的CA,虽然每次签发的有效期都只有三个月,可是发证是自动化的,发证速度较快,而且能够经过脚原本自动续签,为我的网站使用HTTPS提供了一个不错的选择。html
Let’s Encrypt (如下简称LE)的证书签发主要使用基于 ACME协议 的证书自动管理客户端来实现。nginx
LE官方推荐的客户端是 Certbot ,本文中就是使用 Certbot 来获取和续签证书。服务器
假设如今要申请CA 证书的域名是 example.com
。app
首先由WebServer(也就是咱们用户端的服务器)的管理客户端(如Certbot)发送请求到LE,让LE来验证客户端是否真的控制example.com这个域名,接下来LE会提出一些验证动做(原文challenges),好比让客户端在一个很明显的路径上放指定的文件。同时,LE还会发出一个随机数,客户端须要用这个随机数和客户端本身的私钥来进行签名。post
WebServer上的客户端完成LE指定的域名验证动做而且将加密后的签名后,再次发送请求到LE要求验证,LE会验证发回来的签名是否正确,而且验证域名验证动做是否完成,以下载指定的文件而且判断文件里面的内容是否符合要求。网站
这些验证都完成之后,能够申请证书了。加密
完成验证后,客户端生成本身的私钥以及 Certificate Signing Request(CSR) 发送到LE服务器,LE服务器会将CA证书(也是公钥)发放到你的服务器。spa
这样就完成了CA证书的自动化发放了。code
LE 的CA 证书发放原理看着还挺麻烦的,但若是使用 Certbot 客户端,整个过程仍是挺简单的。
在正式获取证书以前,推荐先去Certbot 官网选择适合本身的系统环境。
我这边系统环境是Nginx
+ Ubuntu 18.04 LTS
,因此下面介绍的安装流程只适用于Ubuntu + Nginx。
snap) 是Canonical公司发布的全新的软件包管理方式,它相似一个容器拥有一个应用程序全部的文件和库,各个应用程序之间彻底独立。使用snap 包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理。可是由此带来的问题就是它占用更多的磁盘空间。
$ sudo apt update $ sudo apt install snapd
在安装 Certbot 以前,最好先移除历史快照。
$ sudo apt-get remove certbot
进行安装:
$ sudo snap install --classic certbot
安装完成以后,下一步须要作的就是生成证书了,这里有两种方式:
$ 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