自建代理申请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证书频频失败的测试记录 - 美博园
美博园文章均为“原创 - 首发”,请尊重辛劳撰写,转载请以上面完整链接注明来源!
软件版权归原作者!个别转载文,本站会注明为转载。
这里是你留言评论的地方