快速簽發Let‘s Encrypt證書指南
本文僅記錄給自己的網站添加“小綠鎖”的動手操作過程,不涉及HTTPS工作原理等內容的講解,感興趣的同學可以參考篇尾的文章自行了解。
簡單了解下我的實驗環境:
- 雲服務器:CentOS 7.4
- 網站宿主:Nginx 1.12.2
- 備案域名:www.esofar.cn
這裏以www.esofar.cn
作為演示域名,屆時一定要修改為自己的域名。
1.什麽是 Let‘s Encrypt
Let‘s Encrypt是一個由非營利性組織互聯網安全研究小組(ISRG)提供的免費、自動化和開放的證書頒發機構(CA)。
簡單的說,借助Let‘s Encrypt頒發的證書可以為我們的網站免費啟用HTTPS(SSL/TLS) 。
Let‘s Encrypt免費證書的簽發/續簽都是腳本自動化的,官方提供了幾種證書的申請方式方法,點擊此處快速瀏覽。
官方推薦使用Certbot客戶端來簽發證書,這種方式可參考文檔自行嘗試,不做評價。
我這裏直接使用第三方客戶端acme.sh申請,據了解這種方式可能是目前Let‘s Encrypt免費證書客戶端最簡單、最智能的 shell 腳本,可以自動發布和續訂Let‘s Encrypt中的免費證書。
2.安裝acme.sh
安裝很簡單,一條命令:
curl https://get.acme.sh | sh
整個安裝過程進行了以下幾步,了解一下即可:
- 把acme.sh安裝到當前用戶的主目錄
$HOME
.acme.sh
文件夾中,即~/.acme.sh/
,之後所有生成的證書也會放在這個目錄下; - 創建了一個指令別名
alias acme.sh=~/.acme.sh/acme.sh
,這樣我們可以通過acme.sh
命令方便快速地使用acme.sh腳本; - 自動創建
cronjob
定時任務, 每天0:00點自動檢測所有的證書,如果快過期了,則會自動更新證書。
安裝命令執行完畢後,執行acme.sh --version
確認是否能正常使用acme.sh
命令。
https://github.com/Neilpang/acme.sh
v2.7.9
如有版本信息輸出則表示環境正常;如果提示命令未找到,執行source ~/.bashrc
整個安裝過程不會汙染已有的系統任何功能和文件,所有的修改都限制在安裝目錄~/.acme.sh/
中。
3.生成證書
據 acme.sh 官方文檔介紹,其實現了 acme 協議支持的所有驗證協議,一般有兩種方式驗證:http 和 dns 驗證。
也就是我們有兩種選擇簽發證書,這裏我直接選擇 http 驗證方式,另外一種方式本篇不做介紹,可參考文檔自行嘗試。
簽發證書也很簡單,一條命令:
acme.sh --issue -d esofar.cn -d www.esofar.cn -w /home/wwwroot/esofar.cn
簡單解釋下這條命令涉及的幾個參數:
--issue
是acme.sh腳本用來頒發證書的指令;-d
是--domain
的簡稱,其後面須填寫已備案的域名;-w
是--webroot
的簡稱,其後面須填寫網站的根目錄。
證書簽發成功會有如下輸出:
從截圖看出,生成的證書放在了/root/.acme.sh/esofar.cn
目錄。
另外,可以通過下面兩個常用acme.sh
命令查看和刪除證書:
# 查看證書列表
acme.sh --list
# 刪除證書
acme.sh remove <SAN_Domains>
至此,證書就下載成功。
4.安裝證書
我的站點是由Nginx承載的,所以本節內容重點記錄如何將證書安裝到Nginx,其他 webserver 請參考 acme.sh 文檔自行實踐。廢話不多說,進入本節正題。
上一小節,生成的證書放在了/root/.acme.sh/esofar.cn
目錄,因為這是acme.sh腳本的內部使用目錄,而且目錄結構可能會變化,所以我們不能讓Nginx的配置文件直接讀取該目錄下的證書文件。
正確的做法就是使用--installcert
命令,指定目標位置,然後證書文件會被copy到相應的位置。
一條命令即可解決:
acme.sh --installcert -d esofar.cn --key-file /etc/nginx/ssl/esofar.cn.key --fullchain-file /etc/nginx/ssl/fullchain.cer --reloadcmd "service nginx force-reload"
這裏我將證書放到了/etc/nginx/ssl/
目錄下。
輸出如下信息,則操作成功:
最後一步就是,修改Nginx配置文件啟用ssl,修改完成後需要重啟下Nginx,這一塊不再詳述。Nginx配置請參考:
server {
listen 443 ssl;
server_name esofar.cn;
ssl on;
ssl_certificate /etc/nginx/ssl/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/esofar.cn.key;
root /home/wwwroot/esofar.cn;
index index.html;
location / {
try_files $uri $uri/ @router;
index index.html;
}
location @router {
rewrite ^.*$ /index.html last;
}
}
server {
listen 80;
server_name esofar.cn;
return 301 https://$server_name$request_uri;
}
完成證書部署後可以通過如下站點檢測網站的安全級別:
- https://myssl.com
- https://www.ssllabs.com/
5.更新證書
目前Let‘s Encrypt的證書有效期是90天,時間到了會自動更新,您無需任何操作。 今後有可能會縮短這個時間, 不過都是自動的,不需要您關心。
但是,您也可以強制續簽證書:
acme.sh --renew -d example.com --force
6.更新 acme.sh
目前由於 acme 協議和 letsencrypt CA 都在頻繁的更新, 因此 acme.sh 也經常更新以保持同步。
升級 acme.sh 到最新版:
acme.sh --upgrade
如果您不想手動升級,,可以開啟自動升級:
acme.sh --upgrade --auto-upgrade
您也可以隨時關閉自動更新:
acme.sh --upgrade --auto-upgrade 0
7.相關閱讀
- README.md - acme.sh | Github
- 中文說明 - acme.sh | Github
- Blogs and tutorials - acme.sh | Github
- HTTPS從認識到線上實戰全記錄 - 我是小茗同學 - 博客園
作者:Esofar
出處:https://www.cnblogs.com/esofar/p/9291685.html
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
快速簽發Let‘s Encrypt證書指南