自建代理申請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-01 則需要在網域商那裡設置 DNS 的 TXT 記錄。也就是說,目前網域擁有者非要讓 Let's Encrypt在第三方的主機商或網域商那裡進行設置以確定網域的使用權,否則 Let's Encrypt 會認為使用者對網域沒有實際控制權,所以不予頒發證書。

因為網域申請後,就有網域商那裡的設置許可權,這是最便捷的也是最好的方式,即讓網域使用 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/ 不走 CDN 的 SSL,同時關閉 HTTP 重定向和 HSTS。在 Cloudflare 網站生成 API Token,Caddy 通過此 API Token 生成 TXT 記錄。這個相對來講比較繁瑣。

簡言之,用 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 命令列工具,不但擁有豐富的文件,操作方式也相當簡便,通常只要幾個命令就可以順利產生憑證。

原文鏈接:https://allinfa.com/zh-tw/ssl-certificate-failed-test-record.html
原文標題:自建代理申請SSL證書頻頻失敗的測試記錄 - 美博園
美博園文章均為「原創 - 首發」,請尊重辛勞撰寫,轉載請以上面完整鏈接註明來源!
軟體著作權歸原作者!個別轉載文,本站會註明為轉載。

這裡是你留言評論的地方


請留言


2 + 3 =
【您可以使用 Ctrl+Enter 快速發送】
Copyright © 2007 - 2025 , Design by 美博園. 著作權所有. 若有著作權問題請留言通知本站管理員. 【回到頂部】