自建代理申请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/ssl-certificate-failed-test-record.html
原文标题:自建代理申请SSL证书频频失败的测试记录 - 美博园
美博园文章均为“原创 - 首发”,请尊重辛劳撰写,转载请以上面完整链接注明来源!
软件版权归原作者!个别转载文,本站会注明为转载。

这里是你留言评论的地方


请留言


8 + 2 =
【您可以使用 Ctrl+Enter 快速发送】
Copyright © 2007 - 2024 , Design by 美博园. 版权所有. 若有版权问题请留言通知本站管理员. 【回到顶部】