我应该使用证书吊销列表吗?

信息安全 验证 证书 证书颁发机构 证书吊销 crl
2021-08-24 20:56:38

我一直在尝试为我的 API 提供安全性。

我将向我的客户颁发证书以通过 TLS 通道访问我的 API。所以这将是一个 SSL 客户端身份验证。

我想知道,我应该在我的服务器上使用 CRL 吗?为什么?

注意:我将使用我自己的 CA,并且将在机器之间进行通信,因此不会使用浏览器。

我的问题有一个例外。有一天,如果我的 ca 根密钥被泄露,我可以创建一个 CRL 列表,添加我的旧 ca 根密钥并简单地实施到我的服务器。所以,请忽略这种情况。

来自Websense 社区的图片 在此处输入图像描述

1个回答

首先,CRL包括根 CA。根据定义,根 CA 是一个:它除了自己之外没有颁发者。CRL 传达撤销信息,这是证书颁发者宣布先前颁发的证书应被视为无效的一种方式,即使它看起来很好并且其签名是正确的等等。因此,谈论证书C的 CRL是来自C的颁发者的东西。由于根 CA 没有颁发者,因此无法撤销。

换句话说,如果您的CA 遭到破坏,您将陷入大麻烦。这就是为什么认真对待证书的人使用三级结构的原因:

  • 根 CA离线机器上创建和维护,该机器保存在安全或某个屏蔽室中。它会定期(例如,每月)签署 CRL,但仅此而已。

  • 作为一次性过程,中间 CA由根 CA 授予证书。

  • 所有用户证书均由中间 CA 颁发。

如果中间 CA 被破坏(这是可以想象的,因为它经常使用,因此很可能是网络的一部分),那么根仍然可以发出撤销该中间 CA 的 CRL。


话虽如此,您应该考虑在您的案例中有两个PKI 实例在工作。使用 SSL/TLS 和客户端证书:

  • 服务器拥有一个证书,由客户端验证。
  • 客户端拥有服务器验证的证书。

这两个证书可能存在于不同的世界中,由不同的 CA 颁发。

对于服务器证书,您需要客户端有权访问确保服务器证书有效所需的所有信息,这包括定期发布的 CRL 或等效的东西(OCSP 响应......)。我在这里假设您自己不颁发该证书;相反,您从某个商业 CA 购买“SSL 证书”,因为根 CA 已经分布在所有客户端系统中,并且该 CA 颁发和发布 CRL。

现在让我们看看客户端证书。这些证书将由您的服务器验证。也是决定撤销哪些证书的人换句话说,这里的任何 CRL 都是您同意自己的机制。从这个意义上说,这完全是您的业务,您可以以任何您认为合适的方式实现该功能。例如,您可以在服务器上维护一些列出要被拒绝的客户端证书指纹的 SQL 表,而撤销只是在该表中添加一个条目。当你自言自语时,你不一定需要在你的心理信息上签名!

无论如何,您仍然需要能够撤销证书或类似的东西。此时,您必须了解身份验证(确保与您交谈的客户端是 Bob)和授权(决定应该允许 Bob 做什么)之间的区别。假设 Bob 的私钥被泄露:

  1. 由于 Bob 的密钥可能落入坏人之手,您不能再接受 Bob 的证书作为 Bob 身份的证明。该证书应该以某种方式“取消”(例如撤销)。

  2. 由于证书撤销是异步的,因此您还需要一个“快速阻止”系统,该系统将立即将任何声称的 Bob 排除在系统之外这是在授权层完成的:您暂时“禁用” Bob 的帐户,或将他的访问权限设置为“无”。

  3. 然而,鲍勃仍然是鲍勃,一个(可能是付费的)客户。他会想再次连接,它应该可以工作。因此,必须再次启用 Bob 的访问权限。但是,只有在 Bob 获得了新证书(当然是新的公钥/私钥对)并且 Bob 的旧证书现在被您的服务器拒绝时,您才应该这样做。

因此,总的来说,您确实需要一种拒绝原本看起来不错的证书的方法。撤销就是这样一种方式;另一种是只颁发非常短暂的证书(例如,最多一周有效),但这需要每天或每周向客户推送新证书,而客户端软件不一定能胜任这项任务。因此,通常的方法是向客户端颁发长期有效的证书(有效期为一年或几年),并在服务器端维护允许任意拒绝证书的机制。从概念上讲,该机制就像拥有一个服务器查询的“不受欢迎的证书”列表一样简单。CRL是此类列表的标准格式,发行CA签署允许通过不安全的介质进行传输。但是,如上所述,此列表将在您的CA 和您的服务器之间传输,可能是同一台机器,不一定需要这样的签名。