Let’s Encrypt 簡介
Let’s Encrypt 是免費(fèi)、開放和自動化的證書頒發(fā)機(jī)構(gòu)。由非盈利組織互聯(lián)網(wǎng)安全研究小組(ISRG)運(yùn)營。
SSL應(yīng)用開發(fā)者可以免費(fèi)從 Let’s Encrypt 申請到有效期90天的SSL證書,當(dāng)然在到期之前也可以更新證書,延長有效期。
Let’s Encrypt 支持 ACME 協(xié)議,可以自動化的完成SSL證書的申請、更新、吊銷等操作。
有了正規(guī)的證書頒發(fā)機(jī)構(gòu)簽發(fā)的SSL證書,才能更好的使用SSL相關(guān)功能,例如:提供支持HTTPS的網(wǎng)站。盡管可以使用自簽名的證書,但會在很多情況下收到安全警告或被禁止使用。
證書的申請與使用
Let’s Encrypt 支持 ACME2 開放協(xié)議,未提供WEB等申請途徑,目前僅能通過ACME 客戶端完成證書操作,官方推薦的 ACME 客戶端是 certbot
。
最方便的方法是在WEB服務(wù)器上安裝certbot工具,完成證書管理操作。
測試環(huán)境
- 測試環(huán)境是 Ubuntu 20.04 + Apache2;
- 域名服務(wù)商是阿里云;
certbot 安裝
安裝方法參考certbot官方指引:https://certbot.eff.org/instructions
選擇WEB服務(wù)和操作系統(tǒng)后,會有兩個(gè)選項(xiàng):default
和wildcard
;其中wildcard
方式需要域名服務(wù)商有相應(yīng)的 certbot DNS插件,查了一下certbot的官網(wǎng)文檔,第三方插件dns-multi可以支持阿里云DNS,這里我們先看看default方式。
環(huán)境需求
- 可以訪問命令行,例如ssh
- 有sudo權(quán)限
- WEB服務(wù)器已經(jīng)部署好,并且已經(jīng)上線了80端口的WEB應(yīng)用
- 要申請證書的域名已經(jīng)指向了WEB服務(wù)器
安裝certbot
使用snap安裝certbot(Ubuntu 20.04 已經(jīng)自帶snap,如果沒有,可參考官方文檔安裝)
# 先刪除系統(tǒng)自帶的版本
sudo apt-get remove certbot
# 用snap安裝最新版本
sudo snap install core; sudo snap refresh core
sudo ln -s /snap/bin/certbot /usr/bin/certbot
注冊賬號
在使用之前注冊賬號,否則在第一次交互式使用時(shí)會提示輸入郵箱地址來注冊賬號
sudo certbot register -m 你的郵箱地址 --agree-tos
證書管理
申請證書
可以只申請證書,而不安裝到WEB服務(wù),證書也可以用于其他用途,例如自己的SSL應(yīng)用。
sudo certbot certonly --apache
這里–apache指出如何驗(yàn)證域名所有權(quán),單個(gè)域名使用HTTP驗(yàn)證,apache指出WEB服務(wù)器類型,程序據(jù)此確定具體的操作方法。如果還沒有準(zhǔn)備好WEB服務(wù)器,可以使用–standalone參數(shù)來運(yùn)行一個(gè)WEB服務(wù)器。
這里沒有加其他參數(shù),命令將以交互式的方式提示用戶輸入域名等信息,獲取證書將存儲在 /etc/letsencrypt/archive/你的域名/ 目錄下,最新的證書鏈接在 /etc/letsencrypt/live/你的域名/ 目錄下。
也可以用參數(shù)提供全部信息,實(shí)現(xiàn)自動化操作
sudo certbot certonly --apache -d 你的域名,也可以有多個(gè)域名 -d 或者多次-d指定
常用子命令:
- run 或 缺?。韩@取并安裝證書到WEB服務(wù)器
- certonly:獲取但不安裝到WEB服務(wù)器
- renew:更新快要到期的證書(多長時(shí)間到期看配置文件/etc/letsencrypt/renewal/你的域名.conf,一般是到期前30天內(nèi))
證書管理子命令:
- certificates:查看證書信息
- revoke:吊銷證書(需要指定–cert-name 或 --cert-path)
- delete:刪除證書(需要指定–cert-name)
常用選項(xiàng):
- 驗(yàn)證方式
- –standalone:運(yùn)行獨(dú)立的web服務(wù)驗(yàn)證
- –apache:用Apache驗(yàn)證
- –nginx:用Nginx驗(yàn)證
- –webroot:用webroot方式驗(yàn)證(例如tomcat)
- –manual:手工驗(yàn)證
- 交互選項(xiàng)
- -n:以非交互方式運(yùn)行
- –expand:添加更多域名時(shí)覆蓋舊證書
- –keep-until-expiring, --keep, --reinstall:如果證書已存在,保留現(xiàn)有證書直到需要更新
- –force-renewal, --renew-by-default:強(qiáng)制更新證書(隱含–expand)
- –renew-with-new-domains:域名更新時(shí)強(qiáng)制更新證書
- –allow-subset-of-names:允許部分域名驗(yàn)證失敗
- 安全選項(xiàng)
- –redirect:自動將HTTP重定向到HTTPS
- –no-redirect:不將HTTP重定向到HTTPS
申請并安裝證書
sudo certbot run --apache -d 你的域名
安裝證書會根據(jù)當(dāng)前80端口的網(wǎng)站配置生成一個(gè)對應(yīng)的HTTPS網(wǎng)站配置,并啟用它。
不指定–no-redirect的情況下,安裝證書時(shí)還對修改80端口的網(wǎng)站配置,將HTTP重定向到HTTPS。
更新證書
sudo certbot renew
可以把這個(gè)做成定時(shí)任務(wù),實(shí)現(xiàn)證書的自動更新
注意:這只會更新證書,而不會重啟web服務(wù)使證書生效,要想使證書生效,需要重啟web服務(wù)或者使用certbot install
命令安裝證書以間接重啟web服務(wù)。
使用certbot install
命令在HTTPS端口不是默認(rèn)的443端口時(shí)會有問題,命令會嘗試添加443端口,這可能會導(dǎo)致web服務(wù)無法正常啟動,所以建議使用重啟web服務(wù)的方式使證書生效。
吊銷證書
sudo certbot revoke --cert-name 你的域名
通配符證書
通配符證書是指域名為*.your.domain這樣的證書,為了驗(yàn)證域名所有權(quán),需要使用DNS驗(yàn)證方式,所有要么有相應(yīng)的DNS插件支持,要么根據(jù)提示人工完成驗(yàn)證,由于證書的有效期只有90天,每次都要人工驗(yàn)證比較麻煩,最好還是通過插件自動完成驗(yàn)證,我的域名服務(wù)商是阿里云,查看文檔后發(fā)現(xiàn)有第三方插件dns-multi可以支持,下面來看看如何自動完成證書申請。
certbot官方內(nèi)置的DNS插件以及第三方插件可參考官方文檔:https://eff-certbot.readthedocs.io/en/stable/using.html#dns-plugins
dns-multi官方網(wǎng)站: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
根據(jù)域名服務(wù)商配置dns_multi_provider和其他參數(shù)。
dns_multi_provider 參考 https://go-acme.github.io/lego/dns/ 中 各DNS Provider的 CLI flag name ,其他參數(shù)可以參考 https://go-acme.github.io/lego/dns/ 中的各DNS Provider 鏈接的文檔,即文檔中的那些環(huán)境變量,將需要的環(huán)境變量值配置到 dns-multi.ini 文件中。
dns_multi_provider=alidns
ALICLOUD_ACCESS_KEY=your-access-key
ALICLOUD_SECRET_KEY=your-secret-key
為了保護(hù)ALICLOUD_SECRET_KEY,可以將dns-multi.ini的權(quán)限設(shè)置為只有本用戶可以讀寫
chmod 0600 /etc/letsencrypt/dns-multi.ini
申請命令
申請并安裝證書
sudo certbot -a dns-multi --dns-multi-credentials=/etc/letsencrypt/dns-multi.ini -d "你的域名" -d "*.你的域名"
由于之前已經(jīng)安裝過一個(gè)證書,這一次下載到了 /etc/letsencrypt/archive/你的域名-0001 目錄下,這個(gè)目錄不一定是域名,而是證書名,可以用–cert-name選項(xiàng)指定證書名,不指定會用指定的域名自動生成。證書名會在install等其他命令里用到。
sudo certbot --cert-name "all.你的域名" -a dns-multi --dns-multi-credentials=/etc/letsencrypt/dns-multi.ini -d "你的域名" -d "*.你的域名"
這樣,證書會保存在 /etc/letsencrypt/archive/all.你的域名 目錄下,當(dāng)前版本鏈接在 /etc/letsencrypt/live/all.你的域名 目錄下。
注意: 這里證書包含了 域名 “你的域名” 和 “*.你的域名” ,安裝證書時(shí)會查找域名匹配的網(wǎng)站,“你的域名”會匹配ServerName為“你的域名”的網(wǎng)站,如果沒有,會匹配到默認(rèn)網(wǎng)站000-default;而 “*.你的域名” 匹配 www.你的域名,doc.你的域名等,如果沒有會導(dǎo)致安裝過程失敗??梢院唵蔚膹?fù)制 000-default.conf,并修改其中的ServerName參數(shù)。
完整的自動申請命令
使用-n參數(shù)指定為非交互模式,會檢查參數(shù)是否足夠,如果參數(shù)不足命令會失敗而不是在執(zhí)行過程中提問,這樣用-n參數(shù)測試過能保證申請安裝和更新證書命令自動運(yùn)行時(shí)不會因參數(shù)不足而報(bào)錯(cuò)。
- 申請安裝證書
sudo certbot run -n --cert-name cert1 --apache -d "你的域名" -d "www.你的域名"
如果是通配符證書,由于在安裝證書時(shí)需要知道那個(gè)網(wǎng)站對應(yīng)通配符證書,所以無法一步到位,需要分為下載證書和安裝證書兩步操作,在安裝時(shí)用-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.你的域名
- 更新證書
sudo certbot renew -n
安裝證書使證書生效
sudo certbot install -n --cert-name 證書名 -d 域名1 -d 域名2 --apache
重啟服務(wù)使證書生效文章來源:http://www.zghlxwxcb.cn/news/detail-437784.html
sudo systemctl restart apache2
優(yōu)化:通過crontab來定時(shí)檢查更新證書,在證書沒臨近到期時(shí)不會更新證書,此時(shí)不應(yīng)重啟web服務(wù),但是certbot并沒有返回值檢查這種情況,需要我們通過腳本和live目錄下的證書鏈接是否變化來判斷是否更新了證書,是否需要重啟web服務(wù)。整個(gè)過程可以通過一個(gè)腳本實(shí)現(xiàn),通過crontab來運(yùn)行腳本。文章來源地址http://www.zghlxwxcb.cn/news/detail-437784.html
到了這里,關(guān)于Let’s Encrypt SSL 證書的申請與使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!