我們網站幾年來一直使用Let's Encrypt的免費SSL證書,在服務器上設置了定時檢查、更新以後,每三個月證書會自動續期,也是不費事。後來部分網站接入了Cloudflare的CDN服務,無論是通過代理商的cname接入方式還是直接ns接入方式,源站服務器上的SSL證書更新都沒有特别的問題。
但後來部分國内站點接入百度雲加速的CDN服務後,源站上的SSL證書更新就有問題,無論是cname接入方式還是ns接入方式,下面來分别記錄。
1、以cname方式接入百度雲加速
域名解析服務還是由dnspod提供,源服務器上運行certbot-auto的時候會有報錯:
Domain: amp.subdomain1.example.com Type: dns Detail: DNS problem: SERVFAIL looking up CAA for example.com - the domain's nameservers may be malfunctioning Domain: amp.subdomain2.example.com Type: dns Detail: DNS problem: query timed out looking up CAA for example.com Domain: mip.subdomain3.example.com Type: dns Detail: DNS problem: query timed out looking up CAA for subdomain3.example.com
需要根域名example.com、上級域名subdomain3.example.com(如果有的話)、子域名本身都是A記錄,而不是CNAME記錄,這時可以臨時或者永久暫停以前的CNAME記錄,添加A記錄,然後等修改的記錄生效後(可能幾分鐘,也可能需要很多個小時,生效後用戶訪問源站而不是百度雲加速),再次運行certbot-auto就可以看到成功信息,然後根據需要把臨時的A記錄暫時、重新啟動CNAME記錄,讓百度雲加速生效。
順便記錄一下,今天運行certbot-auto一直報錯:
An unexpected error occurred: There were too many requests of a given type :: Error creating new order :: too many currently pending authorizations: see https://letsencrypt.org/docs/rate-limits/
在網上找了好些辦法,最後是把/etc/letsencrypt/accounts 目錄改一個備份名字,然後使用下面的命令重新注冊:
certbot-auto register
然後再運行以前生成SSL證書的腳本。
2、以ns方式接入百度雲加速
因為百度雲加速裡面的dns解析服務不規範(未對CAA記錄查詢提供符合标準的返回信息),所以也無法讓源站上的Let's Encrypt證書自動續期,需要人工在域名注冊商的後台(我們是用的阿裡雲或者Godaddy來注冊的域名)把ns服務臨時改為其它服務商,例如dnspod,等生效後訪問者是訪問源站,再重新運行certbot-auto就可以看到成功信息,然後去域名注冊商的後台把ns服務再次改為百度雲加速的ns服務器,讓百度雲加速生效。
這個過程很折騰人,各種情況我們花了好幾天來做研究、嘗試。而這種操作也不是一次性的,每三個月都需要人工來操作一次,子域名很多的情況下,還要把生成的證書手工上傳到百度雲加速後台。希望百度雲加速早點把dns解析服務中的這個Bug解決吧,也不是我們一家反映這個問題了。
還有個更氣人的:百度雲加速悄悄把所有海外節點都取消了,也沒有任何公告,當我們自己發現國外網站打開很慢、去咨詢他們企業QQ客服的時候,才告訴我們說近期他們與Cloudflare的合作出了問題,暫時沒有海外節點提供了。這像是大公司做的事情嗎?真是很讓人無語😓。
2021-10-15兩點更新:
- 百度雲加速與Cloudflare的合作分手了,同一個域名的不同子域名可以分别接入百度雲加速和Cloudflare,域名接入Cloudflare,DNS也用Cloudflare的,可以把子域名用cname方式接入百度雲加速;
- 如果這些接入百度雲加速的子域名的Letsencrypt的SSL證書更新的時候如果遇到CAA方面的報錯,可以在Cloudflare的DNS中添加對應子域名的CAA記錄來解決。
评论2
那還是不接了吧
那還是不接了吧我也遇到這個問題,但後來發現一個比較簡單的方法
我也遇到這個問題,但後來發現一個比較簡單的方法,就是dnspod是支持按線路添加解析的。由于Let's Encrypt驗證是國外的線路,這樣直接添加一個境外線路,指向原服務器ip就可以了。不過,對于海外用戶比較多的網站,這一招就不行了。