我正在尝试为我正在设计的解决方案确定证书撤销策略(根据客户要求,将使用 Dogtag PKI)。显而易见的选择似乎是使用 CRL 或使用 OCSP。我试图了解两者的实际含义,并选择一种可以支持此特定解决方案的方法。
我认为这里的主要问题是,虽然客户端偶尔会通过网络访问 PKI 基础设施,但它们也需要在隔离的局域网中运行。在此用例中,两个客户端需要能够直接相互验证身份(包括由中央机构检查证书吊销情况),而无需访问 OCSP 响应器等。
- 这些解决方案(CRL/OCSP)之一是否更适合缓存/离线操作?
- 将 CRL 描述为黑名单并将 OCSP 描述为白名单(可以在本地缓存,或许对已知对等点进行零碎缓存)是否正确?
- 我问错问题了吗?(也许是另一个合适的解决方案,或者是另一个解决问题的角度?)
答案1
OCSP 实际上只是达到同一目的的不同手段:检查某个证书是否被撤销。两者都可以视为黑名单;使用 CRL,客户端将获取整个列表并检查单个证书本身,而使用 OCSP,它会发送请求以获取单个证书的状态,而无需下载完整列表。
顾名思义,OSCP 是一种在线协议;它不适合缓存。使用 CRL 是离线操作的首选;由于 CRL 可能会变得很大,而且需要经常检查,因此大多数操作系统都会保留最近使用过的 CRL 的缓存(当然,取决于所使用的应用程序),这完全符合您的要求。除此之外,请使用任何必要的手段将该 CRL 文件发送到客户端,并让根证书列出他们可以本地访问的 CDP 的内容。
但是,缓存也存在一些缺点。显然,缓存存在允许使用过期 CRL 的撤销证书的风险,或者,相反,在 CRL 过期时遇到错误时机,导致缓存的 CRL 在重新连接到网络之前被丢弃。此外,请确保根证书未列出增量 CRL;这会大大缩短缓存的有效寿命,因为每次检查都需要一个短期增量的当前副本。
CRL 的生命周期将是最大的设计考虑因素;您需要在客户端始终拥有工作副本的需求与可容忍的延迟之间取得平衡,以保证撤销的证书不再被信任。