自建代理申請SSL證書頻頻失敗的測試記錄
【美博翻牆】trojan、v2fly(V2Ray)、NaiveProxy系列翻牆方法中,因封鎖加劇,目前美博建議僅使用如下建立的NaiveProxy:
手動申請SSL證書自建代理:NaiveProxy + Caddy - 美博園 https://allinfa.com/manual-ssl-certificate-naiveproxy-caddy.html 自建代理申請SSL證書頻頻失敗的測試記錄 - 美博園 https://allinfa.com/ssl-certificate-failed-test-record.html
-------------------------------------------------------------
自建代理 NaiveProxy、v2fly(V2Ray)、trojan 遇到了 SSL證書申請困難的問題。自建代理的關鍵一環是要申請到免費的SSL證書,並且自動化申請以方便網友,以前的各種構建代理方法和一鍵腳本也大多是採用自動申請的方法。但後來,自動申請卻頻頻失敗,甚至失敗率100%,也導致網域被SSL證書機構限制無法再申請。美博將最近更新代理時代測試記錄於此,便於日後參考。
這主要原因是證書驗証問題,證書驗証不能通過,就不能發放證書,這又有二方面的原因,一是Let's Encrypt SSL 證書驗証方式,二是Web伺服器caddy及caddy2等自動申請機制。
申請 Let's Encrypt 證書有「速率」限制,而 Caddy 卻是在失敗後連續不斷的反覆申請,這可以在申請證書時看到其重複過程,結果是很快就會達到速率上限。雖然可以通過測試環境來獲取證書,也只是有稍稍寬鬆餘地。由於網域驗証和證書籤發軟體中的一個錯誤,Let's Encrypt在2020年吊銷近300萬張證書。
Let's Encrypt 支持三種驗証方式:HTTP-01,TLS-ALPN-01,DNS-01。他們要先驗証才發放免費證書,所謂驗証,就是確定使用者對該網域有實質的控制權,這個驗証的過程在 Let』s Encrypt 官方稱之為 challenge 。HTTP-01和TLS-ALPN-01兩種方式分別需要開放主機連線埠 80 和 443,並在主機.well-known/acme-challenge/
因為網域申請後,就有網域商那裡的設置許可權,這是最便捷的也是最好的方式,即讓網域使用 DNS challenge 的方式進行驗証,而且,泛網域(通配符)證書申請也必須用 DNS challenge驗証。
本來 Caddy 也能做到自動化添加 TXT 記錄和獲取證書。要讓 Caddy 使用 DNS challenge 驗証,需要在 tls 指令中,指定 DNS 供應商,而特定的 DNS 供應商需要特定的 Caddy 外掛程式支持。
若在國內使用,國內的伺服器上想要提供任何 HTTP 服務,需要備案。網域未備案的情況下,不開放 80 和 443 連線埠使用。
通過 Cloudflare 申請證書,在啟用 CDN 服務之後,客戶端只會和 CDN 連接,Let's Encrypt 的續期也會因為 CDN 受到影響。這需要設置 CDN,讓 .well-known/acme-challenge/
簡言之,用 DNS challenge 的方式獲取證書最簡便輕鬆。
Caddy 為什麼後來申請證書頻頻失敗?
Caddy 默認通過檢查網域來啟用 HTTPS (通過 ACME protocol 檢查網域並簽發證書),並且重定向 HTTP 請求到 HTTPS。它在啟動期間根據需要簽發證書,並在伺服器的使用期間自動重簽發。 Let』s Encrypt 是默認的證書頒發機構,……。在 2016 年第一季度,有百分之二的 Let』s Encrypt 證書是由 Caddy 簽發的。(摘抄自維基百科)
caddy 獲取SSL證書報錯的主要原因是其不能確認網域與DNS對應的關係,所以申請不了證書。如果把網域託管在cloudflare上,網域的解析默認是開著保護,也就是proxied,申請網域的時候需要設置為DNS only,否則無法申請。
如下這些報錯,都是caddy無法申請到證書的一些記錄:
failed to obtain certificate: acme: error: 429 :: POST :: failed to obtain certificate: acme: Error -> One or more domains had a problem: caddy日誌有如下提示: too many registrations for this IP Unable to deactivated authorizations: https://acme-v02.api.letsencrypt.org/acme/authz-v3/736450281 Renewing [aaa.com]: acme: Error -> One or more domains had a problem:
近期美博測試了多種構建方法,並在國區域網路絡環境實測效果,簡略測試記錄比較如下:
不能申請到SSL證書,是一段時間以來網友無法構建代理的主要問題,原因是caddy本身和Let's Encrypt SSL 證書發行限制雙方的問題所致。
1、caddy及caddy2自動申請,測試多次多種方法,自動的、腳本的,100%失敗,所以,網上以前存在的大多數自建方法目前都難以成功。
caddy1及caddy2,在構建代理時僅僅只是作為前端網站掩護之用,caddy1已經夠用,二者在構建代理方面並無差別,caddy2並無優勢。
2、免費的SSL證書:目前主要是免費證書有 Let's Encrypt、BuyPass、ZeroSSL等,仍以Let's Encrypt的穩定可靠性最好;
3、自動續簽存在若干問題。其實,90天手動更新一次證書,也不難。
4、通配符證書,Let』s Encrypt 提供的通配符證書,只支持同級網域,即:你給*.abcdefg.com申請通配符證書,只對aa.abcdefg.com、bbb.abcdefg.com等等這樣的同級網域才可以共用證書,也就是說差異僅僅只是在那個*,不同級的網域,是不被允許共同使用通配符證書的。
5、網上有很多網友寫的 ACME 簡便工具,但是因很多命令參數會牽涉到網站執行環境,有時候差一點就可能申請失敗,若連續失敗個幾次,也有可能會被 Let's Encrypt 限制一段時間無法再次申請憑證。
6、基於種種測試,美博覺得以目前以手動申請SSL證書最穩妥,100%的成功率,帶來90天地安全上網也是合算的。常用手動申請ssl證書的方法有通過已有伺服器的控制台、Cloudflare、certbot、acme.sh、一些在線網站,等等多種方法,
基於安全和方便性,certbot 有代碼庫在 Let's Encrypt,二者配合算是最好。Let's Encrypt 官方有維護一份 Certbot 命令列工具,不但擁有豐富的文件,操作方式也相當簡便,通常只要幾個命令就可以順利產生憑證。
原文標題:自建代理申請SSL證書頻頻失敗的測試記錄 - 美博園
美博園文章均為「原創 - 首發」,請尊重辛勞撰寫,轉載請以上面完整鏈接註明來源!
軟體著作權歸原作者!個別轉載文,本站會註明為轉載。
這裡是你留言評論的地方