我有以下证书:
# certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Found the following certs:
Certificate Name: domain.example
Domains: domain.example imap.domain.example mail.domain.example pop.domain.example smtp.domain.example www.domain.example
Expiry Date: 2019-09-09 03:34:20+00:00 (VALID: 62 days)
Certificate Path: /etc/letsencrypt/live/domain.example/fullchain.pem
Private Key Path: /etc/letsencrypt/live/domain.example/privkey.pem
现在我想要做的是从证书中删除domain.example
和,因为 Web 服务器已移至另一个实例。DNS 条目已更改这一事实意味着,如果和仍然是证书的一部分,则续订过程将失败,因为 DNS 条目现在指向另一个 IP。www.domain.example
domain.example
www.domain.example
如何从加密证书中删除某些主机名,而不删除该证书并创建新证书?
答案1
您应该将 --cert-name 与要保留的主机名列表一起使用。因此:
certbot certonly --cert-name example.com -d imap.domain.example,mail.domain.example,pop.domain.example,smtp.domain.example
看https://certbot.eff.org/docs/using.html#changing-a-certificate-s-domains
答案2
在这种情况下,我通常不会费心重新颁发证书。我只需编辑配置文件/etc/letsencrypt/renewal/example.com.conf
并从其中删除域即可。下次续订时,新证书将不再包含已删除的域。
但在您的情况下,由于您要删除的名称是证书的原始名称,我建议您根本不要更新此证书,而是删除旧证书的更新配置文件,然后仅使用您要保留的名称颁发新证书。
答案3
如何从加密证书中删除某些主机名,而不删除该证书并创建新证书?
你不能。
证书基本上是一个公钥、一些元数据(例如日期和主机名列表)以及全部以上(签名由颁发此证书的 CA 计算)。
这意味着一旦发布,你就可以更改没有什么否则签名将不再匹配,并且会被视为无效而遭到拒绝。
您需要从头开始生成新证书。您不需要删除当前证书,您可以继续使用或不继续使用,如果其中某些名称不再存在或无法解析,也不会造成任何损害。但您可以使用所需的正确名称集生成新证书。
这也表明了为多个名称办理证书的危险:它可能提供激励,因为它降低了要处理的证书数量,但它将所有名称的命运联系在一起。当一切都自动化时,就像处理 Let's Encrypt 时应该的那样,每个名称拥有一个证书应该不是问题。当然,如果您必须管理数百万个名称,情况就不同了。