You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为子域名扩展Let's Encrypt证书时出现Connection refused错误的技术求助

子域名扩展Let's Encrypt证书时出现Connection refused错误的技术求助

首先得帮你理清为啥会出现这个连接拒绝的问题:Let's Encrypt默认用的HTTP-01验证机制,要求公网能访问到你服务器上的.well-known/acme-challenge路径,但你的子域名是CNAME到Backblaze B2做URL掩码的——这意味着所有访问这个子域名的请求,都会被转到B2那边,根本到不了你的Apache服务器,Certbot在Apache上临时放的验证文件自然就访问不到了,所以才会报Connection refused。

那能不能实现你要的效果?答案是可以,但得换一种验证方式,用DNS-01挑战,这种方式不需要访问你的Web服务器,只需要你能修改域名的DNS记录来证明你对域名的控制权,刚好你的DNS托管在Cloudflare,Certbot有现成的插件可以自动完成这个流程,具体步骤如下:

具体操作步骤

  • 第一步:获取Cloudflare API令牌
    登录Cloudflare后台,创建一个API令牌,权限只需要勾选Zone > DNS > Edit,确保这个令牌只能操作你目标域名的DNS记录,这样更安全。

  • 第二步:安装Certbot的Cloudflare插件
    如果是Debian/Ubuntu系统,直接跑这个命令:

    sudo apt install python3-certbot-dns-cloudflare
    

    其他系统(比如CentOS)可以用pip安装:

    pip install certbot-dns-cloudflare
    
  • 第三步:创建Cloudflare凭据文件
    找个安全的目录创建配置文件,比如~/.secrets/certbot/cloudflare.ini,内容只有一行:

    dns_cloudflare_api_token = 你的Cloudflare API令牌
    

    然后设置文件权限,避免其他用户读取:

    sudo chmod 600 ~/.secrets/certbot/cloudflare.ini
    
  • 第四步:用DNS-01挑战重新扩展证书
    运行下面的Certbot命令,指定用Cloudflare DNS验证:

    sudo certbot --expand -d sub.domain.com --authenticator dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini
    

    这个命令会自动让Certbot通过Cloudflare API添加验证用的TXT记录,等待Let's Encrypt验证通过后,就会自动把你的子域名添加到现有证书里。

额外注意事项

  • 完成证书扩展后,如果你要继续用这个子域名做Backblaze B2的URL掩码,得确保你的Apache服务器配置了反向代理到B2的规则,同时要把新证书配置到这个子域名的虚拟主机里,这样HTTPS访问才能正常工作。
  • 如果Cloudflare开启了橙色云(代理模式),不用担心,DNS-01挑战不受代理影响,因为它是直接验证DNS服务器上的记录,不需要经过Cloudflare的代理。

简单来说,你之前用的HTTP-01验证不适合子域名指向外部服务的场景,换成DNS-01验证就能解决问题啦~

备注:内容来源于stack exchange,提问作者kryz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:58:10