CA 向客户端/服务器颁发证书。每当客户端/服务器发出请求时,都会使用证书来验证身份。
现在,如果需要撤销证书,那么由谁来做以及如何做?客户端/服务器是否将其“标记”为已撤销?还是 CA 做的?如果 CA 这样做了,那么它如何知道何时撤销什么?
另外,证书上是否有一个字段表明它已被吊销?或者是否在某处维护了包含所有吊销证书的证书黑名单?
CA 向客户端/服务器颁发证书。每当客户端/服务器发出请求时,都会使用证书来验证身份。
现在,如果需要撤销证书,那么由谁来做以及如何做?客户端/服务器是否将其“标记”为已撤销?还是 CA 做的?如果 CA 这样做了,那么它如何知道何时撤销什么?
另外,证书上是否有一个字段表明它已被吊销?或者是否在某处维护了包含所有吊销证书的证书黑名单?
user2320464的回答很好,但我想扩展更多。
总结:证书持有者一般不管理自己的吊销信息,因为吊销的全部意义在于宣告这个证书的持有者不可信。证书的合法所有者需要能够声明证书已撤销,但同时拥有私钥的攻击者无法“撤消”撤销。如果证书的所有者自己不再值得信赖,您需要一种方法来撤销证书,即使违背他们的意愿。
我们找到的最佳解决方案是让第 3 方跟踪吊销信息,通常是颁发证书的 CA。他们维护黑名单,还可以响应在线请求“证书#28277392 被撤销了吗?”。
吊销确实是证书界的丑小鸭;我们还没有找到一种优雅的方式来处理它。很难的原因是存在看似相互矛盾的要求:
当服务器将其证书交给客户端时,客户端应该能够判断证书是否被吊销。
服务器不应该负责为其自己的证书生成或传递吊销信息。这就像让狗去检查饼干是否还在,而不是撒谎。
因此 CA 需要为每个证书动态生成吊销信息。(或至少跟踪它并每小时或每天发布黑名单)。
证书的优点之一是它们包含验证签名的所有数据,您可以离线且非常快速地进行验证。
但是撤销必须是实时的,你不能只是把它放在初始证书中而忘记它,因为你永远不知道它会在什么时候被撤销。
如果客户端必须直接联系 CA 进行每个证书验证,那么就不可能离线验证证书,并且您会添加网络延迟。
目前使用的主要撤销机制有两种:CRL 和 OCSP(见下文),但都不是真正优雅的解决方案。
你的评论
客户端/服务器是否将其“标记”为已撤销?
让我相信你不完全理解为什么证书会被吊销。撤销证书通常有三个广泛的原因:
证书的合法所有者正在滥用它。通常,这将是颁发不应该颁发证书的子 CA。他们的证书被吊销,告诉世界不要再信任他们了。
服务器已停用,或者由于某种原因不再需要证书。
证书对应的私钥的密钥泄露。我们不再信任任何为此证书签名或加密的内容,因为我们不再知道我们是在与合法所有者还是黑客交谈。
在情况 2) 证书的所有者可以按照您建议的方式将他们自己的证书标记为吊销,但在其他两种情况下,攻击者可以只使用被吊销之前的旧版本证书。因此,撤销确实需要由第三方处理,不受证书持有者的控制。通常由颁发证书的 CA 完成。
要撤销证书,您通常会联系 CA,证明您就是您所说的身份,然后请求他们撤销证书。我认为这取决于 CA 到 CA 在他们为您撤销证书之前他们需要什么级别的证明 - 这是为了防止攻击者请求将证书作为拒绝服务撤销。对于像服务器证书这样的最终用户证书,撤销通常是自动的,并且使用证书的私钥对网络消息进行签名就足够了(即证书可以自行撤销)。对于像 sub-CA 这样的高价值证书的撤销,有很多 IT 工作和清理工作要做,最终用户证书要迁移和重新颁发,要支付罚款等等,所以撤销将是涉及两家公司多名人员的重大事件。
是否在某处维护了包含所有吊销证书的证书黑名单?
是的。最简单的机制称为证书撤销列表 (CRL),这正是您所期望的:所有已撤销证书的序列号列表。每个 CA 负责跟踪其已颁发的所有证书的吊销状态,并每小时或每天发布新的 CRL。CRL 由 CA 密钥签名,因此是防篡改的。它只是一个.crl
你可以下载、传递、wtv 的文件。这可以半离线使用,只要您每 24 小时连接并刷新一次,您就可以离线使用它(当然,在您下一次 CRL 之前,您无法知道您是否正在与受损的证书交谈刷新)。
更复杂的“云友好”机制称为在线证书状态协议 (OCSP)。客户端直接打开到 CA 的连接并询问
客户:“嘿,我有你签发的#9388038829188 证书,还好吗?”
CA:“是的,还是不错的”。
这解决了 CRL 的延迟问题,但需要客户端在线,并为加密过程增加了网络延迟。
2011 年引入了一个名为OCSP Stapling的系统,该系统允许服务器从 CA 预获取 OCSP 响应,例如每 5 分钟一次,并在将其与证书捆绑在一起交给客户端时。除其他外,这加快了客户端加密验证证书的速度,因为它拥有所需一切的本地副本,无需新的网络连接。这被认为是 TLS(即 https、ftps、ssh、vpn 等)的优雅解决方案,您正在打开与具有 Internet 访问权限的服务器的连接,但它不能解决非 TLS 使用证书的吊销问题,例如日志记录使用 PKI 智能卡进入 Windows,启动代码签名软件(就像任何移动应用程序一样),打开签名的 PDF 文档等,即使我没有连接到互联网,我也想继续工作。
证书上是否有一个字段表明它已被撤销?
是的,在 X.509 证书(如 SSL)中,您可以找到 CRL 的地址位于CRL Distribution Point
字段中,而 OCSP 地址位于Authority Information Access
字段中。例如,用于*.stackexchange.com
保护此页面的证书包含:
[1]CRL Distribution Point
Distribution Point Name:
Full Name:
URL=http://crl3.digicert.com/sha2-ha-server-g5.crl
[2]CRL Distribution Point
Distribution Point Name:
Full Name:
URL=http://crl4.digicert.com/sha2-ha-server-g5.crl
[1]Authority Info Access
Access Method=On-line Certificate Status Protocol (1.3.6.1.5.5.7.48.1)
Alternative Name:
URL=http://ocsp.digicert.com
URL=http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt
通常,证书由颁发证书的人吊销。因此,如果您要购买 SSL 证书,后来发现私钥被泄露,那么您将吊销该证书。此操作将记录在“颁发 CA”上,其中新吊销证书的序列号将出现在证书吊销列表 (CRL) 中或通过在线证书状态协议 (OCSP) 提供。两者都由颁发 CA 管理,尽管两者都不必使用。CRL 和 OCSP 位置在证书中发布。理论上这很好,问题是并非所有客户都像他们应该那样勤奋地检查撤销列表。
由于无法以加密方式使证书无效,因此必须使用系统公开宣布证书的撤销。在线证书状态协议 (OCSP) 是当前执行此操作的方式。浏览器可以在连接到网站之前检查 OCSP 提供商以确认证书没有被吊销。
购买证书的人有责任确保证书的安全。
CA 有责任撤销任何被发现违反服务条款的证书。
证书很像驾驶执照。如果有人偷了它,你必须报告它。