上次介绍了如何通过第三方网站申请免费SSL证书,但是有效期只有三个月,三个月后需要重新申请。会造成不必要的损失。Let'sEncrypt是一个免费提供SSL证书的CA。虽然每次签发的有效期只有三个月,但是证书的签发是自动化的,签发速度快,并且可以通过脚本自动续期,个人网站使用HTTPS提供了一个不错的选择。Let'sEncrypt(以下简称LE)的证书发行主要是使用基于ACME协议的证书自动管理客户端实现的。LE官方推荐的客户端是Certbot,本文使用它来获取和更新证书。LE如何自动颁发证书假设申请CA证书的域名是example.com。首先WebServer(也就是我们客户端的服务器)的管理客户端(比如Certbot)向LE发送请求,让LE验证客户端是否真的控制了域名example.com,然后LE会提出一些验证操作(原始文本挑战),例如要求客户端将指定文件放在明显的路径上。同时,LE也会发送一个随机数,客户端需要使用这个随机数和客户端自己的私钥进行签名。WebServer上的客户端完成LE指定的域名验证动作,将加密后的签名再次发送给LE进行验证。LE会验证发回的签名是否正确,验证域名验证动作是否完成,如下载指定文件,判断文件中的内容是否符合要求。完成这些验证后,您就可以申请证书了。验证完成后,客户端生成自己的私钥并向LE服务器发送证书签名请求(CSR),LE服务器将颁发CA证书(也是公钥)给你的服务器。这样就完成了CA证书的自动颁发。使用Certbot获取证书LE的CA证书颁发原理看似比较麻烦,但是如果使用Certbot客户端,整个过程还是相当简单的。在正式获取证书之前,建议先去Certbot官网选择适合自己的系统环境。我这里的系统环境是Nginx+Ubuntu18.04LTS,所以下面介绍的安装过程只适用于Ubuntu+Nginx。1.安装snapsnap)是Canonical发布的一种全新的包管理方式。它类似于一个容器,里面有一个应用程序的所有文件和库,每个应用程序都是完全独立的。使用snap包的好处是解决了应用之间的依赖问题,更方便应用之间的管理。但是这样做的问题是它占用了更多的磁盘空间。$sudoaptupdate$sudoaptinstallsnapd2.安装certbot在安装Certbot之前,最好删除历史快照。$sudoapt-getremovecertbottoinstall:$sudosnapinstall--classiccertbot3.生成证书安装完成后,下一步就是生成证书。有两种方式:生成证书和自动配置$sudocertbot--nginx生成证书手动配置$sudocertbotcertonly--nginx我选择手动配置,大致流程如下:恢复密钥。同意使用协议。输入需要授权的域名,多个域名之间用空格隔开。等待验证通过。需要注意的是:certbot会自动检测本地Nginx的可用域名(没有server_name配置的域名将不会被检测到)。如果其中一个域名验证失败,则不会生成密钥和证书。如果一切正常,可以看到/etc/letsencrypt/live/your_sites/目录下多了四个文件:cert.pem:公钥,服务器证书chain.pem:中间证书fullchain.pem:第一个的集合两个privkey.pem:配置NginxSSL的私钥只需要使用fullchain.pem和privkey.pem:server{listen443ssl;服务器名称www.example.com;SSL开启;ssl_certificate/etc/letsencrypt/live/www.exampl.com/fullchain.pem;ssl_certificate_key/etc/letsencrypt/live/www.example.com/privkey.pem;...}至此,从生成证书到配置的整个过程就完成了。如果自动续订即将到期,可以使用certbotrenew来续订证书。需要注意的是,如果证书没有过期,则不会更新。可与conrtab配合使用,每半个月凌晨3点自动续订$0315**certbotrenew参考链接Let'sEncrypt免费SSL证书获取及自动续订
