上次介紹瞭如何經過第三方網站申請免費的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