Let's Encrypt证书申请失败通常由网络连通性、DNS解析、文件验证路径、libcurl版本冲突、中间服务干扰及ICP备案状态等多环节异常共同导致,需逐项排查修复。

如果您在宝塔面板中申请Let's Encrypt证书时反复收到失败提示,问题通常并非单一原因导致,而是由网络连通性、DNS解析、文件验证路径、系统库兼容性或备案状态等多环节异常共同引发。以下是针对该现象的多种独立排查与修复路径:
一、检查域名解析与网络可达性
Let's Encrypt验证过程需从其全球服务器发起对您域名的主动探测,若DNS未正确生效或出口网络无法抵达CA基础设施,则验证必然中断。
1、使用命令行执行 dig +short yourdomain.com,确认返回IP与宝塔面板所在服务器IP完全一致。
2、执行 ping -c 4 acme-v02.api.letsencrypt.org,观察是否出现丢包或超时;若失败,尝试更换DNS为 1.1.1.1 或 8.8.8.8 并刷新解析缓存。
3、运行 curl -I https://acme-v02.api.letsencrypt.org/directory,验证HTTPS连接是否可建立;如返回 Connection timed out,说明服务器被限制访问海外IP段。
二、验证文件路径与Web服务配置
采用HTTP-01验证方式时,Let's Encrypt会请求 http://yourdomain.com/.well-known/acme-challenge/xxx,该路径必须能被公网直接访问且返回正确内容,任何中间拦截或权限错误均会导致404。
1、登录服务器,进入站点根目录,执行 ls -l .well-known/acme-challenge/,确认该目录存在且包含非空验证文件。
2、手动访问 http://yourdomain.com/.well-known/acme-challenge/test.txt(先创建该测试文件),检查是否返回文本内容而非404或重定向。
3、检查Nginx/Apache配置中是否存在屏蔽 .well-known 路径的规则,如 location ~ /\.|\.php$ 类正则,需显式放行该目录。
三、排查libcurl.so.4版本冲突
宝塔面板底层调用acme.sh脚本时依赖系统libcurl库,若存在多个版本共存或符号版本不匹配,将导致SSL握手失败或API调用静默终止。
1、执行 ldd /usr/bin/curl | grep curl,查看实际加载的libcurl路径及版本号。
2、运行 /usr/bin/curl --version,比对输出中libcurl版本是否为7.58.0及以上;若低于此版本,可能无法兼容ACME v2协议。
3、若发现链接至 /usr/local/lib/libcurl.so.4 等非系统默认路径,临时重命名该文件并执行 ldconfig 刷新缓存,强制使用系统标准库。
四、关闭干扰性中间服务
反向代理、CDN、WAF、301全局跳转等机制会截断或改写ACME验证请求,使Let's Encrypt无法获取预期响应。
1、在宝塔面板网站设置中,暂时关闭所有已启用的“反向代理”规则。
2、登录对应CDN控制台(如Cloudflare、阿里云DCDN),将域名解析模式切换为“DNS only”,暂停代理服务。
3、检查网站配置中是否存在强制HTTPS跳转或www/non-www 301规则,临时禁用后重试证书申请。
五、确认域名备案与合规状态
在中国大陆境内服务器上,若域名尚未完成ICP备案或处于审核中,运营商会主动拦截对该域名的全部公网HTTP/HTTPS请求,导致验证URL始终不可达。
1、登录工信部ICP/IP地址/域名信息备案管理系统,查询该域名备案状态是否为“已备案”且主体信息有效。
2、若显示“审核中”或“未备案”,则必须等待备案通过后方可成功申请Let's Encrypt证书。
3、对于已备案域名,检查宝塔面板中绑定的站点域名是否与备案域名完全一致(含子域名层级),例如备案的是 example.com,则 www.example.com 需单独提交接入备案。










