certbot-auto棄用后, 怎么繼續用certbot申請泛域名證書


前言

certbot-auto申請證書時發現如下提示;certbot-auto被棄用了

Skipping bootstrap because certbot-auto is deprecated on this system.
Your system is not supported by certbot-auto anymore.
Certbot cannot be installed.
Please visit https://certbot.eff.org/ to check for other alternatives.

根據github的issue看到作者的回應(原回復是英文, 我機翻了一下截圖出來)

github的issue: https://github.com/certbot/certbot/issues/8535

正文

安裝snap

centos7下的安裝如下:

# 將EPEL添加到CentOS 7
yum install epel-release   
#安裝snapd
yum install snapd
#安裝后,需要啟用用於管理主快照通信套接字
systemctl enable --now snapd.socket
# 啟用快照支持
ln -s /var/lib/snapd/snap /snap

檢查更新snap版本

 snap install core
 snap refresh core

卸載舊的certbot

# 以前沒有裝過的不用這一步
yum remove certbot

安裝certbot

# 安裝certbot
snap install --classic certbot
# --classic: 官方對classic是如上面所描述的那樣定義的,它是與strict相對的。也就是說,在默認情況下,它使用的是strict模式,對安全權限做了極高的要求與限制,然后classic就和傳統的安裝包一樣對安全權限沒有限制,其實這里的classic就約等於確認已知不安全的風險的含義

# 添加軟鏈,全局使用
ln -s /snap/bin/certbot /usr/bin/certbot

申請泛域名證書和自動續期

申請前准備

不管是申請還是續期,只要是通配符證書,只能采用 dns-01 的方式校驗申請者的域名,也就是說 certbot 操作者必須手動添加 DNS TXT 記錄。

如果你編寫一個 Cron (比如 1 1 */1 * * root certbot-auto renew),自動 renew 通配符證書,此時 Cron 無法自動添加 TXT 記錄,這樣 renew 操作就會失敗,如何 解決?

certbot 提供了一個 hook,可以編寫一個 Shell 腳本,讓腳本調用 DNS 服務商的 API 接口,動態添加 TXT 記錄,這樣就無需人工干預了。

這里就要用到第三方插件: https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au, 目前支持阿里雲 DNS、騰訊雲 DNS、華為雲 NDS、GoDaddy;

下載:

git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au

cd certbot-letencrypt-wildcardcertificates-alydns-au

chmod 0777 au.sh

申請證書

# 例子(這些參數根據自己的情況填寫)
certbot certonly  
-d example.com                          
-d *.example.com                        
--manual                                    
--preferred-challenges dns
--dry-run                 
--manual-auth-hook "/etc/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh python aly add"        # 申請之前添加TXT記錄
--manual-cleanup-hook "/etc/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh python aly clean"       # 申請之后刪除TXT記錄
--pre-hook "systemctl stop nginx.service"    # 停止nginx
--post-hook "systemctl start nginx.service"  # 啟動nginx
  • -d: 域名
  • --manual: 手動模式申請
  • --preferred-challenges: 驗證方式
  • --dry-run: 測試模式(正式使用時去掉這個參數)
  • --manual-auth-hook: 以交互方式或使用shell腳本獲取證書鈎子
  • --manual-cleanup-hook: 以交互方式或使用shell腳本獲取證書鈎子
  • --pre-hook: 前置鈎子;可用來執行一些命令
  • --post-hook: 后置鈎子;可用來執行一些命令

詳細的參數說明到github查看: https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au

申請成功后:

配置文件: /etc/letsencrypt/renewal/
證書文件源目錄: /etc/letsencrypt/archive/
證書文件映射目錄: /etc/letsencrypt/live/

知道了這些,我們來實際操作一下:

nginx(openresty)配置文件中添加ssl證書, 這個不用多說了

首先去配置一下第三方插件, 檢查一下php和python執行程序的路徑是否正確, 並填寫阿里雲或者其他平台的key和token

  • 然后執行生成命令:
certbot certonly \
-d ranblogs.com \
-d *.ranblogs.com \
--manual \
--preferred-challenges dns \
--manual-auth-hook "/disk2/soft_pack/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php aly add" \
--manual-cleanup-hook "/disk2/soft_pack/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php aly clean" \
--post-hook "cp -r /etc/letsencrypt/archive/ranblogs.com /disk2/nginx/cert/ranblogs.com && docker restart openresty"

# post-hook: 我這里是docker環境無法找到外面的文件, 所以我這里是把證書文件放到docker映射的目錄去了,並重啟openresty

執行結果:

驗證結果:

自動續期

上面已經成功申請到證書了, 但是只有三個月的有效期, 這肯定是不夠的, 還好certbot也提供了自動續期的命令certbot renew

現在我們把這個命令加到定時器:

crontab -e
# 定時續期(每天執行)
0 0 1 * * sudo certbot renew --deploy-hook  "cp -r /etc/letsencrypt/archive/ranblogs.com /disk2/nginx/cert/ranblogs.com && docker restart openresty"

這里可能會有點疑問, 假如當天ssl到期了, 但是定時器還沒執行, 是不是會有一段時間內https無法使用; 其實certbot已經考慮到了, 會在到期前30天續期;所以不用擔心這個問題;

FAQ

報錯: /usr/bin/php: 沒有那個文件或目錄

自己修改路徑

參考資料

certbot官網: https://certbot.eff.org/

https://blog.csdn.net/baidu_19473529/article/details/114277125

https://zhuanlan.zhihu.com/p/354241539

https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM