一、Let’s Encrypt證書前置需求
- 域名所有者:Let’s Encrypt 是一個(gè)證書頒發(fā)機(jī)構(gòu)(CA), 要從 Let’s Encrypt 獲取網(wǎng)站域名的證書,必須證明對(duì)域名的實(shí)際控制權(quán)。
- ACME 協(xié)議軟件 : 在Let’s Encrypt 使用 ACME 協(xié)議來驗(yàn)證對(duì)給定域名的控制權(quán)并頒發(fā)證書, 要從Let’s Encrypt 獲得證書,需要選擇一個(gè)要使用的 ACME 客戶端 Certbot 、或者使用得最多的 acme.sh。
二、證書兼容性
參考來源:https://letsencrypt.org/zh-cn/docs/certificate-compatibility/
- 信任ISRG RootX1的平臺(tái)
● Windows >= XP SP3 (如果自動(dòng) Root 證書更新沒有手動(dòng)禁用的話)
● macOS >= 10.12.1
● iOS >= 10 (不包括 iOS 9)
● iPhone 5 及更新的手機(jī)可以升級(jí)到 iOS 10 ,因此可以信任ISRG Root X1
● Android >= 7.1.1 (由于我們的特殊交互簽名證書,安卓 >= 2.3.6 默認(rèn)情況下可信任)
● Mozilla Firefox >= 50.0
● Ubuntu >= Precise Pangolin / 12.04(安裝更新后)
● Debian >= jessie / 8 (安裝更新后)
● Java 8 >= 8u141
● Java 7 >= 7u151
● NSS >= 3.26
瀏覽器(Chrome、Safari、Edge、Opera) 一般都信任他們所運(yùn)行于的操作系統(tǒng)的根證書。 Firefox 是例外:它有自己的根證書列表。 不久,Chrome的新版本將 也有自己的根證書列表。 - 信任DST Root CA X3但不信任ISRG Root X1的平臺(tái)
這些平臺(tái)在2021年9月前可以使用, 但是現(xiàn)在不再驗(yàn)證 Let’s Encrypt 證書。
● macOS < 10.12.1
● iOS < 10
● Mozilla Firefox < 50
● Ubuntu >= intrepid / 8.10
● Debian >= squeeze / 6, < jessie /8
● Java 8 >= 8u101, < 8u141
● Java 7 >= 7u111, < 7u151
● NSS >= v3.11.9, < 3.26
● Amazon FireOS (Silk Browser) (版本范圍未知)
● Cyanogen > v10 (添加 ISRG Root X1 信任的版本未知)
● Jolla Sailfish OS > v1.1.2.16 (添加 ISRG Root X1 信任的版本未知)
● Kindle > v3.4.1 (添加 ISRG Root X1 信任的版本未知)
● Blackberry >= 10.3.3 (添加 ISRG Root X1 信任的版本未知)
● 固件 >= 5.00 的 PS4 游戲機(jī) (添加 ISRG Root X1 信任的版本未知) - 已知不兼容的平臺(tái)
● Blackberry < v10.3.3
● Android < v2.3.6
● Nintendo 3DS
● Windows XP SP3 之前的系統(tǒng)
○ 無法處理 SHA-2 簽名的證書
● Java 7 < 7u111
● Java 8 < 8u101
● Windows Live Mail(2012 版郵件客戶端,而非網(wǎng)頁端郵件服務(wù))
○ 無法處理不包含CRL的證書
● PS3 游戲機(jī)
● PS4 游戲機(jī)(固件版本 < 5.00 )
三、使用acme.sh生成證書
-
acme.sh說明
acme.sh 實(shí)現(xiàn)了 acme 協(xié)議, 可以從 letsencrypt 生成免費(fèi)的證書,普通用戶和 root 用戶都可以安裝使用,安裝過程不會(huì)污染已有的系統(tǒng)任何功能和文件, 所有的修改都限制在安裝目錄中(acme.sh),自動(dòng)創(chuàng)建 cronjob, 每天 0:00 點(diǎn)自動(dòng)檢測(cè)所有的證書, 如果快過期了, 需要更新, 則會(huì)自動(dòng)更新證書。
acme.sh 實(shí)現(xiàn)了 acme 協(xié)議支持的所有驗(yàn)證協(xié)議, 一般有兩種方式驗(yàn)證: http 和 dns 驗(yàn)證,dns的方式更契合我們的架構(gòu),所以采用dns方式,手動(dòng)在域名上添加一條 txt 解析記錄,驗(yàn)證域名所有權(quán),好處是只需要 dns 的解析記錄即可完成驗(yàn)證. 壞處是,如果不同時(shí)配置 Automatic DNS API,使用這種方式 acme.sh 將無法自動(dòng)更新證書,每次都需要手動(dòng)再次重新解析驗(yàn)證域名所有權(quán)。
注意:證書生成后只有三個(gè)月的有效期,acme.sh會(huì)自動(dòng)創(chuàng)建 cronjob, 每天 0:00 點(diǎn)自動(dòng)檢測(cè)所有的證書, 如果快過期了, 需要更新, 則會(huì)自動(dòng)更新證書. -
安裝acme.sh
#海外服務(wù)器
curl https://get.acme.sh | sh -s email=my@example.com
#國內(nèi)服務(wù)器
git clone https://gitee.com/neilpang/acme.sh
#國內(nèi)需要更改目錄名
mv acme.sh .acme.sh
創(chuàng)建一個(gè)別名:
alias acme.sh=~/.acme.sh/acme.sh
- 更新acme.sh
目前由于 acme 協(xié)議和 letsencrypt CA 都在頻繁的更新, 因此 acme.sh 也經(jīng)常更新以保持同步。
升級(jí) acme.sh 到最新版 :
./acme.sh --upgrade
開啟自動(dòng)升級(jí):
./acme.sh --upgrade --auto-upgrade
關(guān)閉自動(dòng)更新:
./acme.sh --upgrade --auto-upgrade 0
- 生成證書(以GoDaddy為例)
參考來源:https://github.com/acmesh-official/acme.sh/wiki/dnsapi
先登錄到使用DNS解析的賬號(hào), 生成api key和secret ,然后:
export GD_Key=""
export GD_Secret=""
設(shè)置let’s encrypt為默認(rèn)ssl證書
./acme.sh --set-default-ca --server letsencrypt
生成證書:
./acme.sh --issue --dns dns_gd -d test.com -d www.test.com
若使用阿里云,將以下紅框內(nèi)容替換即可:
四、安裝證書
默認(rèn)生成的證書都放在安裝目錄下: .acme.sh/, 請(qǐng)不要直接使用此目錄下的文件, 例如: 不要直接讓 nginx/apache 的配置文件使用這下面的文件。 這里面的文件都是內(nèi)部使用, 而且目錄結(jié)構(gòu)可能會(huì)變化。
正確的使用方法是使用 --install-cert 命令,并指定目標(biāo)位置, 然后證書文件會(huì)被copy到相應(yīng)的位置,例如:
Apache example:
acme.sh --install-cert -d visbodyfit.com \
--cert-file /path/to/certfile/in/apache/cert.pem \
--key-file /path/to/keyfile/in/apache/key.pem \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd "service apache2 force-reload"
Nginx example:
mkdir -p /etc/nginx/acme.sh/visbod/
#實(shí)際執(zhí)行時(shí)使用命令:
./acme.sh --install-cert -d visbody.com \
--cert-file /etc/nginx/acme.sh/visbod/cert.pem \
--key-file /etc/nginx/acme.sh/visbod/key.pem \
--fullchain-file /etc/nginx/acme.sh/visbod/fullchain.pem \
--reloadcmd "service nginx force-reload"
#官網(wǎng)給的命令:
acme.sh --install-cert -d visbodyfit.com \
--key-file /path/to/keyfile/in/nginx/key.pem \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "service nginx force-reload"
注意:Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/.cer ,否則 SSL Labs 的測(cè)試會(huì)報(bào) Chain issues Incomplete 錯(cuò)誤。
指定的所有參數(shù)都會(huì)被自動(dòng)記錄下來, 并在將來證書自動(dòng)更新以后, 被再次自動(dòng)調(diào)用.
acme.sh --info -d visbodyfit.com
會(huì)輸出如下內(nèi)容:
DOMAIN_CONF=/root/.acme.sh/visbodyfit.com/visbodyfit.com.conf
Le_Domain=visbodyfit.com
Le_Alt=no
Le_Webroot=dns_ali
Le_PreHook=
Le_PostHook=
Le_RenewHook=
Le_API=https://acme-v02.api.letsencrypt.org/directory
Le_Keylength=
Le_OrderFinalize=https://acme-v02.api.letsencrypt.org/acme/finalize/23xxxx150/781xxxx4310
Le_LinkOrder=https://acme-v02.api.letsencrypt.org/acme/order/233xxx150/781xxxx4310
Le_LinkCert=https://acme-v02.api.letsencrypt.org/acme/cert/04cbd28xxxxxx349ecaea8d07
Le_CertCreateTime=1649358725
Le_CertCreateTimeStr=Thu Apr 7 19:12:05 UTC 2022
Le_NextRenewTimeStr=Mon Jun 6 19:12:05 UTC 2022
Le_NextRenewTime=1654456325
Le_RealCertPath=
Le_RealCACertPath=
Le_RealKeyPath=/etc/acme/example.com/privkey.pem
Le_ReloadCmd=service nginx force-reload
Le_RealFullChainPath=/etc/acme/example.com/chain.pem
查看上傳證書是否存在,然后點(diǎn)擊“HTTPS配置”即可看到該證書能配置的域名:
五、更新證書
acme.sh在生成證書后會(huì)自動(dòng)添加定時(shí)任務(wù),目前證書在60天后會(huì)自動(dòng)更新。
查看定時(shí)任務(wù):文章來源:http://www.zghlxwxcb.cn/news/detail-453973.html
crontab -l
輸出內(nèi)容大致如下:
56 * * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
六、排錯(cuò)
參考文檔:https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh
使用acme.sh過程中如果出現(xiàn)錯(cuò)誤,可以添加debug log分析:文章來源地址http://www.zghlxwxcb.cn/news/detail-453973.html
acme.sh --issue ..... --debug
到了這里,關(guān)于Let’s Encrypt免費(fèi)證書獲取方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!