LetsEncrypt 证书续订失败

LetsEncrypt 证书续订失败

我尝试更新服务器的证书。当前的证书 1 个月前就过期了,但直到现在我才处理。

我尝试使用该letsencrypt-auto renew命令但失败了:

注意:我更改了域/用户/服务器名称。

user@vps:~/letsencrypt# ./letsencrypt-auto renew
Updating letsencrypt and virtual environment dependencies.......
Running with virtualenv: sudo /home/user/.local/share/letsencrypt/bin/letsencrypt renew
Processing /etc/letsencrypt/renewal/www.example.com.conf
2016-04-02 07:07:00,862:WARNING:letsencrypt.cli:Attempting to renew cert from /etc/letsencrypt/renewal/www.example.com.conf produced an unexpected error: You've asked to renew/replace a seemingly valid certificate with a test certificate (domains: www.example.com, example.com). We will not do that unless you use the --break-my-certs flag!. Skipping.

All renewal attempts failed. The following certs could not be renewed:
  /etc/letsencrypt/live/www.example.com/fullchain.pem (failure)
1 renew failure(s), 0 parse failure(s)

我愚蠢地尝试了带有标志的命令--break-my-certs

user@vps:~/letsencrypt# ./letsencrypt-auto renew --break-my-certs
Updating letsencrypt and virtual environment dependencies...You are using pip version 7.1.2, however version 8.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
....
Running with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt renew --break-my-certs
Processing /etc/letsencrypt/renewal/www.example.com.conf
new certificate deployed with reload of apache server; fullchain is /etc/letsencrypt/live/www.example.com/fullchain.pem

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/www.example.com/fullchain.pem (success)

我以为是这个证书,但当我尝试连接到我的网站时,出现错误,提示我证书是由不受信任的一方颁发的。(但是,有效期没有问题。)

因此我再次尝试了第一个命令:

user@vps:~/letsencrypt# ./letsencrypt-auto renew
Updating letsencrypt and virtual environment dependencies.......
Running with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt renew
Processing /etc/letsencrypt/renewal/www.example.com.conf

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/www.example.com/fullchain.pem (skipped)
No renewals were attempted.

但正如您所见,它不起作用。

答案1

请记住,只有当您之前的证书是使用 letsencrypt-auto 0.4.0 或更高版本颁发时,使用 letsencrypt-auto 的续订程序才会正常工作。如果您的证书是使用旧版 letsencrypt-auto 颁发的,那么您需要以与第一次相同的方式、使用相同的选项和参数再次颁发证书,之后 letsencrypt-auto 续订将按预期工作。

无论如何,当您尝试续订域名时收到的第一条消息是:

You've asked to renew/replace a seemingly valid certificate with a test certificate (domains: www.example.com, example.com). We will not do that unless you use the --break-my-certs flag!. Skipping.

这意味着您拥有一个有效的域名证书,但是续订命令检测到您尝试使用临时服务器而不是生产服务器续订证书(注意:临时服务器是 letsencrypt 基础设施的一部分,允许测试为您的域名颁发证书的过程,但由假 CA 颁发,如果您检查证书,您会发现颁发者是Fake LE Intermediate X1)。

因此,当您重复更新过程但使用标志时,--break-my-certs您现在拥有一个由假 CA 颁发的证书,连接到您网站的所有客户端都不会信任该证书。

我想您正在使用一些 conf /etc/letsencrypt/cli.{conf,ini}/etc/letsencrypt/renewal/yourdomain.conf或者您用来颁发第一个证书的任何配置文件,并且在某些 conf 中您指定了标志 staging,因此 letsencrypt-auto 尝试使用它而不是 production 来更新您的证书。

针对您的续订配置文件执行此命令:

grep -E 'server\ =|config_file\ =' /etc/letsencrypt/renewal/yourdomain.conf

注意:如果您为您的域名颁发了多个证书,并且您从证书中包含的 FQDN 子集中添加或删除了域名,那么您yourdomain.conf可以拥有而不是yourdomain-0001.confyourdomain-0002.conf等等。

config_file 将显示您是否正在为您的域使用配置文件,如果您不使用任何配置文件,您将看到字样 None。

服务器将显示您是否针对暂存服务器或生产服务器颁发证书。

如果是暂存的话你会看到以下内容:

server = https://acme-staging.api.letsencrypt.org/directory

如果是生产你会看到:

server = https://acme-v01.api.letsencrypt.org/directory

如果您看到该服务器指向暂存,请编辑域的续订配置文件并将其更改为生产https://acme-v01.api.letsencrypt.org/directory

此外,如果您有一个 config_file,您应该检查该配置文件以确保服务器选项指向生产,并且没有像 staging、staging = True、test-cert 或 test-cert = True 这样的选项

一旦您删除了暂存选项并在 config_file 和续订配置文件中将服务器更改为生产服务器,您可以尝试再次续订您的证书。

./letsencrypt-auto renew --force-renewal

如果您最终获得了域名的证书,请注意祝贺消息,该消息将告诉您保存证书的目录,请记住使用正确的证书路径配置您的 Web 服务器、邮件服务器等。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/yourdomain/fullchain.pem. Your cert
   will expire on xxxx-xx-xx. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.

答案2

使用最新的 certbot 时,我遇到了与 OP 相同的问题。结果发现,这完全不是 certbot 的错 - 它运行完美 - 你只需要记得重启/重新加载你的网络服务器,这样它就会提取更新的证书!因此,正如 LetsEncrypt 建议的那样certbot renew --quiet,请记住在几分钟后添加网络服务器重新加载,以防 nginx/etc/init.d/nginx reload

答案3

我遇到了同样的问题,您必须重新启动 Web 服务器(Apache 或 nginx)。
我曾经certbot renew --quiet更新过。

相关内容