上次更新: | 查看所有文档
当证书不再安全使用时,您应该吊销它。这可能出于几个不同的原因。例如,您可能不小心在公共网站上共享了私钥;黑客可能从您的服务器上复制了私钥;或者黑客可能暂时控制了您的服务器或 DNS 配置,并利用它来验证和颁发他们拥有私钥的证书。
当您吊销 Let’s Encrypt 证书时,Let’s Encrypt 会通过 在线证书状态协议 (OCSP) 发布吊销信息,一些浏览器会检查 OCSP 以查看是否应该信任证书。请注意,OCSP 存在一些基本问题,因此并非所有浏览器都会进行此检查。尽管如此,吊销与受损私钥相对应的证书仍然是一项重要做法,并且是 Let’s Encrypt 的 用户协议 所要求的。
要吊销 Let’s Encrypt 证书,您将使用 ACME API,最有可能通过像 Certbot 这样的 ACME 客户端。您需要向 Let’s Encrypt 证明您有权吊销证书。有三种方法可以做到这一点:从颁发证书的帐户、使用不同的授权帐户,或使用证书私钥。
指定原因代码
吊销证书时,Let’s Encrypt 用户应按如下方式选择原因代码
- 未提供原因或
unspecified
(RFC 5280 CRLReason #0)- 当以下原因代码不适用于吊销请求时,用户不得提供除“未指定”之外的原因代码。
keyCompromise
(RFC 5280 CRLReason #1)- 当用户有理由相信其证书的私钥已被泄露时,例如未经授权的人员访问了其证书的私钥,证书用户必须选择“keyCompromise”吊销原因。
- 如果吊销请求使用证书私钥而不是用户帐户私钥进行签名,Let’s Encrypt 可能会忽略请求中的吊销原因,并将原因设置为“keyCompromise”。
superseded
(RFC 5280 CRLReason #4)- 当用户请求新的证书来替换现有证书时,证书用户应选择“superseded”吊销原因。
cessationOfOperation
(RFC 5280 CRLReason #5)- 当用户不再拥有证书中所有域名或不再使用证书因为他们正在停用网站时,证书用户应选择“cessationOfOperation”吊销原因。
- 如果吊销请求来自未订购所涉证书但已证明控制证书中所有标识符的用户帐户,Let’s Encrypt 可能会忽略请求中的吊销原因,并将原因设置为“cessationOfOperation”。
指定除上述详细内容之外的任何原因代码的吊销请求将被拒绝。
从颁发证书的帐户
如果您最初颁发了证书,并且您仍然控制着用于颁发证书的帐户,您可以使用您的帐户凭据吊销它。Certbot 默认情况下会尝试这样做。示例
certbot revoke --cert-path /etc/letsencrypt/archive/${YOUR_DOMAIN}/cert1.pem
使用不同的授权帐户
如果有人在入侵您的主机或 DNS 后颁发了证书,您需要在重新获得控制权后吊销该证书。为了吊销证书,Let’s Encrypt 需要确保您控制着该证书中的域名(否则人们可能会在没有权限的情况下互相吊销证书)!
为了验证此控制,Let’s Encrypt 使用了与验证颁发控制权相同的方法:您可以在 DNS TXT 记录中添加值 或在 HTTP 服务器上添加文件。通常,ACME 客户端会为您处理这些问题。请注意,大多数 ACME 客户端将验证和颁发相结合,因此请求验证的唯一方法是尝试颁发。然后,如果您不想要它,可以吊销生成的证书,或者只需销毁私钥。
如果您想完全避免颁发证书,可以在命令行中包含一个不存在的域名,这会导致颁发失败,但仍然会验证其他现有的域名。示例
certbot certonly --manual --preferred-challenges=dns -d ${YOUR_DOMAIN} -d nonexistent.${YOUR_DOMAIN}
并按照说明进行操作。如果您更喜欢使用 HTTP 而不是 DNS 进行验证,请将--preferred-challenges
标志替换为--preferred-challenges=http
。
验证了对要吊销的证书中所有域名的控制后,您可以从 crt.sh 下载证书,然后像颁发证书一样吊销证书
certbot revoke --cert-path /PATH/TO/downloaded-cert.pem
使用证书私钥
如果您最初没有颁发证书,但您拥有相应的私钥副本,您可以使用该私钥来签名吊销请求以进行吊销。例如,如果您看到私钥不小心被公开,您可以使用此方法吊销使用该私钥的证书,即使您不是最初颁发这些证书的人。
要使用此方法,您首先需要一个 PEM 格式的私钥副本。
然后,如果您还没有,请下载要吊销的证书。Let’s Encrypt 将所有证书记录到 证书透明度 日志中,因此您可以从像 crt.sh 这样的日志监控器中找到并下载证书。搜索匹配的SubjectPublicKeyInfo
(SPKI)字段将找到使用私钥的所有证书。要从私钥中提取 SPKI 哈希
openssl pkey -outform DER -in /PATH/TO/privkey.pem -pubout | openssl sha256
获得私钥和证书后,您可以像这样吊销证书
certbot revoke --cert-path /PATH/TO/cert.pem --key-path /PATH/TO/privkey.pem --reason keyCompromise