Let’s Encrypt SSL 证书的申请与使用
Let’s Encrypt 簡(jiǎn)介
Let’s Encrypt 是免費(fèi)、開放和自動(dòng)化的證書頒發(fā)機(jī)構(gòu)。由非盈利組織互聯(lián)網(wǎng)安全研究小組(ISRG)運(yùn)營(yíng)。
SSL應(yīng)用開發(fā)者可以免費(fèi)從 Let’s Encrypt 申請(qǐng)到有效期90天的SSL證書,當(dāng)然在到期之前也可以更新證書,延長(zhǎng)有效期。
Let’s Encrypt 支持 ACME 協(xié)議,可以自動(dòng)化的完成SSL證書的申請(qǐng)、更新、吊銷等操作。
有了正規(guī)的證書頒發(fā)機(jī)構(gòu)簽發(fā)的SSL證書,才能更好的使用SSL相關(guān)功能,例如:提供支持HTTPS的網(wǎng)站。盡管可以使用自簽名的證書,但會(huì)在很多情況下收到安全警告或被禁止使用。
證書的申請(qǐng)與使用
Let’s Encrypt 支持 ACME2 開放協(xié)議,未提供WEB等申請(qǐng)途徑,目前僅能通過ACME 客戶端完成證書操作,官方推薦的 ACME 客戶端是 certbot。
最方便的方法是在WEB服務(wù)器上安裝certbot工具,完成證書管理操作。
測(cè)試環(huán)境
- 測(cè)試環(huán)境是 Ubuntu 20.04 + Apache2;
- 域名服務(wù)商是阿里云;
certbot 安裝
安裝方法參考certbot官方指引:https://certbot.eff.org/instructions
選擇WEB服務(wù)和操作系統(tǒng)后,會(huì)有兩個(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)用
- 要申請(qǐ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注冊(cè)賬號(hào)
在使用之前注冊(cè)賬號(hào),否則在第一次交互式使用時(shí)會(huì)提示輸入郵箱地址來(lái)注冊(cè)賬號(hào)
sudo certbot register -m 你的郵箱地址 --agree-tos證書管理
申請(qǐng)證書
可以只申請(qǐng)證書,而不安裝到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ù)來(lái)運(yùn)行一個(gè)WEB服務(wù)器。
這里沒有加其他參數(shù),命令將以交互式的方式提示用戶輸入域名等信息,獲取證書將存儲(chǔ)在 /etc/letsencrypt/archive/你的域名/ 目錄下,最新的證書鏈接在 /etc/letsencrypt/live/你的域名/ 目錄下。
也可以用參數(shù)提供全部信息,實(shí)現(xiàn)自動(dòng)化操作
sudo certbot certonly --apache -d 你的域名,也可以有多個(gè)域名 -d 或者多次-d指定常用子命令:
- run 或 缺省:獲取并安裝證書到WEB服務(wù)器
- certonly:獲取但不安裝到WEB服務(wù)器
- renew:更新快要到期的證書(多長(zhǎng)時(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:自動(dòng)將HTTP重定向到HTTPS
- –no-redirect:不將HTTP重定向到HTTPS
申請(qǐng)并安裝證書
sudo certbot run --apache -d 你的域名安裝證書會(huì)根據(jù)當(dāng)前80端口的網(wǎng)站配置生成一個(gè)對(duì)應(yīng)的HTTPS網(wǎng)站配置,并啟用它。
不指定–no-redirect的情況下,安裝證書時(shí)還對(duì)修改80端口的網(wǎng)站配置,將HTTP重定向到HTTPS。
更新證書
sudo certbot renew可以把這個(gè)做成定時(shí)任務(wù),實(shí)現(xiàn)證書的自動(dòng)更新
吊銷證書
sudo certbot revoke --cert-name 你的域名通配符證書
通配符證書是指域名為*.your.domain這樣的證書,為了驗(yàn)證域名所有權(quán),需要使用DNS驗(yàn)證方式,所有要么有相應(yīng)的DNS插件支持,要么根據(jù)提示人工完成驗(yàn)證,由于證書的有效期只有90天,每次都要人工驗(yàn)證比較麻煩,最好還是通過插件自動(dòng)完成驗(yàn)證,我的域名服務(wù)商是阿里云,查看文檔后發(fā)現(xiàn)有第三方插件dns-multi可以支持,下面來(lái)看看如何自動(dòng)完成證書申請(qǐng)。
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 文件中。
為了保護(hù)ALICLOUD_SECRET_KEY,可以將dns-multi.ini的權(quán)限設(shè)置為只有本用戶可以讀寫
chmod 0600 /etc/letsencrypt/dns-multi.ini申請(qǐng)命令
申請(qǐng)并安裝證書
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)指定證書名,不指定會(huì)用指定的域名自動(dòng)生成。證書名會(huì)在install等其他命令里用到。
sudo certbot --cert-name "all.你的域名" -a dns-multi --dns-multi-credentials=/etc/letsencrypt/dns-multi.ini -d "你的域名" -d "*.你的域名"這樣,證書會(huì)保存在 /etc/letsencrypt/archive/all.你的域名 目錄下,當(dāng)前版本鏈接在 /etc/letsencrypt/live/all.你的域名 目錄下。
注意: 這里證書包含了 域名 “你的域名” 和 “*.你的域名” ,安裝證書時(shí)會(huì)查找域名匹配的網(wǎng)站,“你的域名”會(huì)匹配ServerName為“你的域名”的網(wǎng)站,如果沒有,會(huì)匹配到默認(rèn)網(wǎng)站000-default;而 “*.你的域名” 匹配 www.你的域名,doc.你的域名等,如果沒有會(huì)導(dǎo)致安裝過程失敗。可以簡(jiǎn)單的復(fù)制 000-default.conf,并修改其中的ServerName參數(shù)。
完整的自動(dòng)申請(qǐng)命令
使用-n參數(shù)指定為非交互模式,會(huì)檢查參數(shù)是否足夠,如果參數(shù)不足命令會(huì)失敗而不是在執(zhí)行過程中提問,這樣用-n參數(shù)測(cè)試過能保證申請(qǐng)安裝和更新證書命令自動(dòng)運(yùn)行時(shí)不會(huì)因參數(shù)不足而報(bào)錯(cuò)。
如果是通配符證書,由于在安裝證書時(shí)需要知道那個(gè)網(wǎng)站對(duì)應(yīng)通配符證書,所以無(wú)法一步到位,需要分為下載證書和安裝證書兩步操作,在安裝時(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.你的域名總結(jié)
以上是生活随笔為你收集整理的Let’s Encrypt SSL 证书的申请与使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何关掉visual studio 20
- 下一篇: android倒计时代码