Let’s Encrypt SSL 证书的申请与使用
Let’s Encrypt 簡介
Let’s Encrypt 是免費、開放和自動化的證書頒發機構。由非盈利組織互聯網安全研究小組(ISRG)運營。
SSL應用開發者可以免費從 Let’s Encrypt 申請到有效期90天的SSL證書,當然在到期之前也可以更新證書,延長有效期。
Let’s Encrypt 支持 ACME 協議,可以自動化的完成SSL證書的申請、更新、吊銷等操作。
有了正規的證書頒發機構簽發的SSL證書,才能更好的使用SSL相關功能,例如:提供支持HTTPS的網站。盡管可以使用自簽名的證書,但會在很多情況下收到安全警告或被禁止使用。
證書的申請與使用
Let’s Encrypt 支持 ACME2 開放協議,未提供WEB等申請途徑,目前僅能通過ACME 客戶端完成證書操作,官方推薦的 ACME 客戶端是 certbot。
最方便的方法是在WEB服務器上安裝certbot工具,完成證書管理操作。
測試環境
- 測試環境是 Ubuntu 20.04 + Apache2;
- 域名服務商是阿里云;
certbot 安裝
安裝方法參考certbot官方指引:https://certbot.eff.org/instructions
選擇WEB服務和操作系統后,會有兩個選項:default和wildcard;其中wildcard方式需要域名服務商有相應的 certbot DNS插件,查了一下certbot的官網文檔,第三方插件dns-multi可以支持阿里云DNS,這里我們先看看default方式。
環境需求
- 可以訪問命令行,例如ssh
- 有sudo權限
- WEB服務器已經部署好,并且已經上線了80端口的WEB應用
- 要申請證書的域名已經指向了WEB服務器
安裝certbot
使用snap安裝certbot(Ubuntu 20.04 已經自帶snap,如果沒有,可參考官方文檔安裝)
# 先刪除系統自帶的版本 sudo apt-get remove certbot # 用snap安裝最新版本 sudo snap install core; sudo snap refresh core sudo ln -s /snap/bin/certbot /usr/bin/certbot注冊賬號
在使用之前注冊賬號,否則在第一次交互式使用時會提示輸入郵箱地址來注冊賬號
sudo certbot register -m 你的郵箱地址 --agree-tos證書管理
申請證書
可以只申請證書,而不安裝到WEB服務,證書也可以用于其他用途,例如自己的SSL應用。
sudo certbot certonly --apache這里–apache指出如何驗證域名所有權,單個域名使用HTTP驗證,apache指出WEB服務器類型,程序據此確定具體的操作方法。如果還沒有準備好WEB服務器,可以使用–standalone參數來運行一個WEB服務器。
這里沒有加其他參數,命令將以交互式的方式提示用戶輸入域名等信息,獲取證書將存儲在 /etc/letsencrypt/archive/你的域名/ 目錄下,最新的證書鏈接在 /etc/letsencrypt/live/你的域名/ 目錄下。
也可以用參數提供全部信息,實現自動化操作
sudo certbot certonly --apache -d 你的域名,也可以有多個域名 -d 或者多次-d指定常用子命令:
- run 或 缺省:獲取并安裝證書到WEB服務器
- certonly:獲取但不安裝到WEB服務器
- renew:更新快要到期的證書(多長時間到期看配置文件/etc/letsencrypt/renewal/你的域名.conf,一般是到期前30天內)
證書管理子命令:
- certificates:查看證書信息
- revoke:吊銷證書(需要指定–cert-name 或 --cert-path)
- delete:刪除證書(需要指定–cert-name)
常用選項:
- 驗證方式
- –standalone:運行獨立的web服務驗證
- –apache:用Apache驗證
- –nginx:用Nginx驗證
- –webroot:用webroot方式驗證(例如tomcat)
- –manual:手工驗證
- 交互選項
- -n:以非交互方式運行
- –expand:添加更多域名時覆蓋舊證書
- –keep-until-expiring, --keep, --reinstall:如果證書已存在,保留現有證書直到需要更新
- –force-renewal, --renew-by-default:強制更新證書(隱含–expand)
- –renew-with-new-domains:域名更新時強制更新證書
- –allow-subset-of-names:允許部分域名驗證失敗
- 安全選項
- –redirect:自動將HTTP重定向到HTTPS
- –no-redirect:不將HTTP重定向到HTTPS
申請并安裝證書
sudo certbot run --apache -d 你的域名安裝證書會根據當前80端口的網站配置生成一個對應的HTTPS網站配置,并啟用它。
不指定–no-redirect的情況下,安裝證書時還對修改80端口的網站配置,將HTTP重定向到HTTPS。
更新證書
sudo certbot renew可以把這個做成定時任務,實現證書的自動更新
吊銷證書
sudo certbot revoke --cert-name 你的域名通配符證書
通配符證書是指域名為*.your.domain這樣的證書,為了驗證域名所有權,需要使用DNS驗證方式,所有要么有相應的DNS插件支持,要么根據提示人工完成驗證,由于證書的有效期只有90天,每次都要人工驗證比較麻煩,最好還是通過插件自動完成驗證,我的域名服務商是阿里云,查看文檔后發現有第三方插件dns-multi可以支持,下面來看看如何自動完成證書申請。
certbot官方內置的DNS插件以及第三方插件可參考官方文檔:https://eff-certbot.readthedocs.io/en/stable/using.html#dns-plugins
dns-multi官方網站:https://github.com/alexzorin/certbot-dns-multi
安裝dns-multi
還是采用snap安裝
sudo snap install certbot-dns-multi sudo snap set certbot trust-plugin-with-root=ok sudo snap connect certbot:plugin certbot-dns-multi配置dns-multi
配置文件:/etc/letsencrypt/dns-multi.ini
根據域名服務商配置dns_multi_provider和其他參數。
dns_multi_provider 參考 https://go-acme.github.io/lego/dns/ 中 各DNS Provider的 CLI flag name ,其他參數可以參考 https://go-acme.github.io/lego/dns/ 中的各DNS Provider 鏈接的文檔,即文檔中的那些環境變量,將需要的環境變量值配置到 dns-multi.ini 文件中。
為了保護ALICLOUD_SECRET_KEY,可以將dns-multi.ini的權限設置為只有本用戶可以讀寫
chmod 0600 /etc/letsencrypt/dns-multi.ini申請命令
申請并安裝證書
sudo certbot -a dns-multi --dns-multi-credentials=/etc/letsencrypt/dns-multi.ini -d "你的域名" -d "*.你的域名"由于之前已經安裝過一個證書,這一次下載到了 /etc/letsencrypt/archive/你的域名-0001 目錄下,這個目錄不一定是域名,而是證書名,可以用–cert-name選項指定證書名,不指定會用指定的域名自動生成。證書名會在install等其他命令里用到。
sudo certbot --cert-name "all.你的域名" -a dns-multi --dns-multi-credentials=/etc/letsencrypt/dns-multi.ini -d "你的域名" -d "*.你的域名"這樣,證書會保存在 /etc/letsencrypt/archive/all.你的域名 目錄下,當前版本鏈接在 /etc/letsencrypt/live/all.你的域名 目錄下。
注意: 這里證書包含了 域名 “你的域名” 和 “*.你的域名” ,安裝證書時會查找域名匹配的網站,“你的域名”會匹配ServerName為“你的域名”的網站,如果沒有,會匹配到默認網站000-default;而 “*.你的域名” 匹配 www.你的域名,doc.你的域名等,如果沒有會導致安裝過程失敗。可以簡單的復制 000-default.conf,并修改其中的ServerName參數。
完整的自動申請命令
使用-n參數指定為非交互模式,會檢查參數是否足夠,如果參數不足命令會失敗而不是在執行過程中提問,這樣用-n參數測試過能保證申請安裝和更新證書命令自動運行時不會因參數不足而報錯。
如果是通配符證書,由于在安裝證書時需要知道那個網站對應通配符證書,所以無法一步到位,需要分為下載證書和安裝證書兩步操作,在安裝時用-d指定域名
# 下載證書 sudo certbot certonly -n --cert-name cert1 -a dns-multi --dns-multi-credentials=/etc/letsencrypt/dns-multi.ini -d "你的域名" -d "*.你的域名" # 安裝證書 sudo certbot install -n --cert-name cert1 -i apache -d 你的域名 sudo certbot install -n --cert-name cert1 -i apache -d www.你的域名總結
以上是生活随笔為你收集整理的Let’s Encrypt SSL 证书的申请与使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何关掉visual studio 20
- 下一篇: android倒计时代码