You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在将新服务器投入生产前获取Let's Encrypt证书?

解决未上线服务器提前获取Let's Encrypt证书的问题

嘿,这个问题我之前帮不少开发者踩过坑——确实,Let's Encrypt的HTTP-01验证默认要求你的服务器对外可响应域名请求,但如果是还没正式上线的新机器,确实会卡在这里。给你几个实用的方案,按需选择就行:

方案1:使用DNS-01验证(最推荐的离线/预上线场景)

这是Let's Encrypt提供的不需要服务器对外提供HTTP服务的验证方式,核心是通过你对域名DNS记录的控制权来证明你拥有该域名。

  • 操作步骤:

    1. 在新服务器上安装ACME客户端(比如常用的certbot
    2. 运行证书生成命令,指定DNS挑战:
      certbot certonly --manual --preferred-challenges dns -d yourdomain.com -d www.yourdomain.com
      
    3. 按照命令行提示,在你的域名DNS服务商后台添加一条TXT记录(比如_acme-challenge.yourdomain.com,值为命令给出的随机字符串)
    4. 等待DNS记录生效(可以用dig _acme-challenge.yourdomain.com TXT验证),然后按回车继续,就能成功生成证书
  • 进阶优化:如果你的DNS服务商提供API(比如Cloudflare、Route53等),可以使用certbot对应的DNS插件(如certbot-dns-cloudflare),自动完成TXT记录的添加和删除,全程无需手动操作,非常适合自动化脚本。

方案2:临时启用HTTP服务+临时解析域名

如果你不想折腾DNS,可以临时让新服务器对外可访问一小段时间,完成HTTP-01验证:

  • 操作步骤:
    1. 把你的域名A/AAAA记录临时修改为新服务器的公网IP(验证完成后再改回原记录即可)
    2. 在新服务器上临时启动一个简单的HTTP服务器,比如用Python:
      # 创建验证目录
      mkdir -p /tmp/acme/.well-known/acme-challenge
      cd /tmp/acme
      # 启动80端口的HTTP服务
      python3 -m http.server 80
      
    3. 另开一个终端,运行certbot的webroot模式:
      certbot certonly --webroot -w /tmp/acme -d yourdomain.com
      
    4. 验证完成后,停止临时HTTP服务,把域名解析改回原来的设置即可

方案3:在现有服务器生成证书后迁移

如果你的现有服务器已经托管了该域名,或者可以临时把域名解析到现有服务器:

  • 操作步骤:
    1. 在现有服务器上生成该域名的证书(用你平时的方式,比如certbot的webroot或nginx模式)
    2. 复制证书文件到新服务器:证书通常存放在/etc/letsencrypt/live/yourdomain.com/目录下,需要复制fullchain.pem(证书链)和privkey.pem(私钥)两个文件
    3. 在新服务器上配置web服务器(如nginx、Apache)使用这些证书
    4. 新服务器上线后,记得把证书续期的任务迁移到新机器上(比如修改crontab里的certbot自动续期任务)

注意事项

  • 证书文件的权限要配置正确:比如nginx需要证书文件对www-data用户可读,避免出现权限错误
  • 不管用哪种方案,生成的证书有效期都是90天,记得提前设置自动续期(certbot默认会添加crontab任务,迁移后要确认续期任务正常运行)

内容的提问来源于stack exchange,提问作者KNejad

火山引擎 最新活动