certbot-letencrypt 工具的 ROADMAP
今天有個開發者在 certbot-letencrypt-wildcardcertificates-alydns-au 倉庫提了一個非常好的 issues,臨時解決了下,也順便想了想這個工具的後續 ROADMAP,將相關的想法寫成本文。
certbot-letencrypt 這個工具(https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au,點選文章底部“原文連線”可訪問),主要作用是自動生成/renew(續期)letencrypt 萬用字元證書,關於這個工具我寫過一篇文章 《不會自動為Let’s Encrypt萬用字元證書續期?我寫了個小工具》 ,可以看一看。
這個工具目前已經 45個fork,157個star,給了我很大的鼓舞,很多開發者也發現了很多我沒有考慮到的問題,感覺收穫很大。工具雖然很小,但如果你想使用免費的 ssl 證書部署 https 服務,那麼非常有用。
所以說,即使你寫的工具或程式碼很小、很簡單,但如果解決了實際問題,仍然有很大的價值。
1:今天遇到了什麼問題
提的 issues 主要說,如果想為 example.com 和 *.example.com 生成一張 SAN 證書,執行該工具的時候會失敗,比如:
$ ./certbot-auto certonly-d example.com -d *.example.com--manual --preferred-challenges dns--dry-run --manual-auth-hook /指令碼目錄/au.sh
原因在哪兒呢?example.com 和 *.example.com 對應的 TXT 記錄名是同一個,工具在執行的時候會呼叫二次au.sh,該 sh 會呼叫 alydns.php(自動生成DNS TXT記錄)介面,alydns.php 的邏輯是刪除同名的 TXT 記錄,然後 add 相應的 TXT 記錄。
聰明的讀者可能想到了,certbot 在驗證 DNS 記錄的時候,只會獲取到一條 TXT 記錄(實際上應該有二條),這樣校驗失敗,certbot renew 更新失敗。
具體的問題和臨時解決方案見 https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au/issues/21。
大概的原理就是 alydns.php 在執行的時候不刪除相應的 TXT 記錄,DNS 能夠增加多條同名的 TXT 記錄(這是我今天的收穫)。
這個臨時解決方案有個最大的弊端就是,由於 TXT 記錄永遠不刪除,所以會越來越多,可能會超過 DNS 條目數的上限。
其實 certbot 提供了一個 hook(—manual-cleanup-hook),可以在執行成功後,進行一些 cleanup 工作(比如刪除 DNS TXT 記錄),比如:
$ ./certbot-auto certonly-d example.com -d *.example.com--manual --preferred-challenges dns--dry-run --manual-auth-hook /指令碼目錄/au.sh --manual-cleanup-hook /指令碼目錄/cleanup.sh
但這樣我就要為這個工具新增多個 php 檔案(用於刪除 DNS TXT 記錄),有人說,你不能合併到 alydns.php 檔案中嗎?可惜的是 certbot 的 hook 不支援為 hook 指令碼新增命令列引數。
如果新增 —manual-cleanup-hook,這個工具就龐大了,使用者會望而生畏,所以終極解決方案我再思考下。
2:同步和部署證書
這個工具只是生成/更新證書,一般情況下,更新證書後,需要重新啟動 web 伺服器,以便載入新的證書檔案。
如果執行 certbot 的機器和 web 伺服器是同一臺,很好解決:
certbot-auto renew --manual --preferred-challenges dns -deploy-hook"service nginx restart"--manual-auth-hook /指令碼目錄/au.sh
可很多公司的伺服器肯定不止一臺,一般使用專用的 certbot 機器生成/更新證書,然後將證書同步到相關的web伺服器上,應用場景有很多,很難概括。
今天我查看了 certbot 的官方文件,有了新的想法,後續打算寫個工具解決下,雖然不一定完美,但有很多開發者一起協助,相信會越來越好。
最後,今天是我春節前最後一天工作,能夠解決一個問題,非常開心,祝大家新春快樂,多多轉發我的公眾號文章,相信你不會失望的。
certbot 和 letencrypt 相關文章:
歡迎大家關注我的公眾號(ID:yudadanwx,虞大膽的嘰嘰喳喳)。