证书存储和查找

Cert storage and lookup

从事与证书相关的工作,想知道是否有一种方法可以 tag/hash/something 以一种独特的方式查找证书的父签名证书比查找文件夹中的所有证书更快?我正在寻找某种明确且唯一的索引方法,以便当我读取证书以验证它时,我可以从某些字段中提取信息并快速将其与父证书相关联以快速解析链,假设我已经正确索引了具有相同唯一密钥的证书(索引值可用于文件名或数据库或其他)。

我注意到在 ubuntu 上,当您查看 /etc/ssl/certs 时,有一堆符号链接看起来可能是某种链接到证书的 crc32

lrwxrwxrwx 1 root root     12 Mar  9  2016 e113c810.0 -> Certigna.pem
lrwxrwxrwx 1 root root     25 Mar  9  2016 e18bfb83.0 -> QuoVadis_Root_CA_3_G3.pem
lrwxrwxrwx 1 root root     36 Mar  9  2016 e268a4c5.0 -> AddTrust_Low-Value_Services_Root.pem
lrwxrwxrwx 1 root root     49 Mar  9  2016 e2799e36.0 -> GeoTrust_Primary_Certification_Authority_-_G3.pem
lrwxrwxrwx 1 root root     25 Mar  9  2016 e36a6752.0 -> Atos_TrustedRoot_2011.pem
lrwxrwxrwx 1 root root     25 Mar  9  2016 e442e424.0 -> QuoVadis_Root_CA_3_G3.pem

我知道证书 thumbprint/fingerprint 但这不是我要找的,而且似乎只是作为对证书内容本身的进一步验证。

谢谢

您可以使用发行者 public 密钥的哈希值。它作为 Authority Key Identifier 证书扩展的一部分出现在叶证书中。它包含根据发行者的 public 密钥计算的哈希值。在 CA 证书中,此值存储在 Subject Key Identifier.

如果缺少 AKI 扩展,在链中绑定证书的唯一方法是使用名称匹配。叶证书中的 Issuer 字段必须与颁发者的 Subject 字段匹配。但是,如果 CA 维护多个 CA 密钥,则可能有多个 CA 证书具有相同的主题,但具有不同的密钥。在这种情况下,您将必须尝试每个匹配的发行人候选人并尝试验证签名。

这意味着您应该维护两个索引:通过颁发者的 public 密钥和颁发者的 Subject 字段的散列来加速证书查找。