如何停止更新letsencrypt/certbot证书?

48

网上有很多关于如何使用letsencrypt创建和更新证书的教程,但我想删除并停止更新我创建的一个证书(该证书仅用于测试目的)。我如何停止更新最初使用letsencrypt命令获取的一个证书(同时继续更新其他证书)?

我没有看到任何其他地方有人提出这个问题,也没有在man letsencrypt命令中找到似乎可以完成此操作的命令。

目前,我正在使用以下cron作业更新证书:

30 2 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log
35 2 * * 1 /bin/systemctl reload nginx

你可能需要提供更多的细节 - 通常这不是自动完成的。我有一个每月处理这个任务的cron作业。如果我想禁用它,我只需将其注释掉(crontab -e)。 - David Betz
@DavidBetz 已更新更多细节。禁用 Cron 作业并不像想象中那么简单,因为我在此服务器上还有其他证书需要更新。 - Jackson
7个回答

82

使用 certbot,你可以简单地使用以下命令:

certbot delete --cert-name mywebsite.com

这将从您的letsencrypt配置目录中删除证书和所有相关文件。


是的,虽然被选中的答案可能是正确的,但已经过时了。这个答案才是正确的答案,如果能更新一下就太好了。 - Frank V
9
如果您使用 certbot delete 命令,将会出现一个交互式菜单。 - Sjors Ottjes
对我没有起作用。我收到了一个确认提示,然后出现了一条消息“找不到名称为xxx的证书”。然而,随后尝试更新所有内容又再次失败,引用该特定域名作为罪犯(它已经不在DNS中)。 - Mikhail T.

31

这位用户想要删除证书并停止续订,其他回答已经涵盖了这一点。但是如果您想保留证书而不继续续订(例如您已经切换到另一台服务器,但正在等待所有DNS更改传播),可以进入/etc/letsencrypt/renewal并将example.com.conf重命名为example.com.conf.disabled(或任何其他非.conf名称,甚至可以将其完全删除:

/etc/letsencrypt/renewal/example.com.conf.disabled

您可以通过运行以下命令来验证它已被禁用,如其他答案中所述。

sudo certbot renew --dry-run

最后,有人在其他地方提出可以简单地在/etc/letsencrypt/renewal/example.com.conf文件的顶部放置autorenew = False,但似乎不起作用。(我本来想回复那篇文章以给出我的反馈意见,但他们的论坛在30天后截止评论。)
经过审核,我意识到大部分信息已包含在其他答案中,但我想澄清一个禁用更新而不删除或禁用证书本身的独立用例所需的步骤。

2
选项autorenew=False对我来说完美地运作。我将选项放在配置文件/etc/letsencrypt/renewal/mycert.conf的[renewalparams]部分下,续订就被简单地跳过了。 - dAm2K
在Ubuntu 20.04上,将文件重命名为.disabled扩展名对我起到了作用。 - undefined

10
目前似乎没有正式“取消”续订的命令。但是,我在这个帖子中找到了一个建议,看起来可以解决问题。
我尝试运行下面的命令:
sudo find /etc/letsencrypt/ -name '*outdated.example.com*'

我只找到了一个文件分别在live/, archive/renewal/目录中。

我也尝试运行以下命令,

sudo grep -r /etc/letsencrypt/ -e 'outdated.example.com'

我在renewal/目录下只在一个文件中找到了关于过时域名的引用(该文件为renewal/outdated.example.com.conf)。
我运行了letsencrypt renew并在输出中列出了outdated.example.com
然后,我创建了一个名为_renewal_disabled的目录,并将renewal/outdated.example.com.conf移动到该目录中。
我再次运行了letsencrypt renew,此时输出中不再列出outdated.example.com
因此,我可以假设我已经“禁用”了证书的更新。

今天(2017)仅使用 certbot renew 是可能的吗?如何做到? - Peter Krauss

6

已更新

请查看答案:https://dev59.com/lVkS5IYBdhLWcg3wUVMG#47372583

Certbot的新版本支持通过CLI删除证书

旧答案

要从Certbot的更新中删除域名,您可以删除或移动(更安全)有问题的域名证书文件,并运行certbot renew --dry-run以确保您已删除过时/无效的配置。

rm -rf /etc/letsencrypt/live/${BAD_DOMAIN}/
rm -f /etc/letsencrypt/renewal/${BAD_DOMAIN}.conf
certbot renew --dry-run

如果这样可以的话,你可以在未来的更新中不使用--dry-run来继续你的更新。
certbot renew

如果你正在使用像nginx或其他服务器,不要忘记编辑配置文件,以便它们不再指向无效或已移除的证书。
最后,重新启动或重新加载服务器配置,就完成了!

3
以下是一个交互式菜单:
certbot delete

您也可以使用certbot delete --cert-name example.com非交互方式删除证书,但这似乎会经过正常的授权过程,如果无法授权您的域名,则会失败。上述交互式命令将直接删除所有内容而不尝试授权。


我知道这是一个较新的功能,但这应该是被接受的答案。之前试着用--cert-name做了很多尝试,结果非常麻烦,现在这个方法简直太容易了。 - jhmckimm

0

这是我所做的:

  1. 我运行了
certbot renew

并记录了哪些域名没有续订或出现问题

  1. 我创建了一个
/etc/certbot/disabled

用于保存已禁用(但未删除)域名的目录

  1. 根据具体情况,我将所有不需要的.conf文件从/etc/certbot/renewal移动到/etc/certbot/disabled
#cd /etc/certbot/renewal
#mv <disabled_domain> ../disabled
  1. 然后我解决了所有特殊情况:

4A)默认的“万能”服务器网站

#certbot --apache -d <server.catchall.url>

4B)邮件服务器

i)停止httpd

#service httpd stop

ii) 执行 certbot 命令生成证书

#certbot certonly --standalone -d <mail.server.domain>

iii) 启动httpd

#service httpd start

iv) 检查 httpd

#service httpd status
  1. 我在我的cron job中添加了一个命令,每周日检查证书的过期情况。
# GL  2019-12-09  Renew Let's Encrypt SSL Certificate
#                 Execute every Sunday at noon
00 12 * * Sun     /bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && /bin/certbot renew >> /var/log/certbot.log 2>&1

这解决了我的问题。


0
在使用Certbot snap的Debian系统中,编辑/etc/letsencrypt/renewal/mydomain.com.conf,在[renewalparams]下添加autorenew = False
version = 2.7.4
...
# Options used in the renewal process                                                                                                                                                                       
[renewalparams]
...
autorenew = False

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接