如何区分同一CA颁发的证书

如何区分同一CA颁发的证书

我有一个由外部证书颁发机构 (CA) 签署的证书。如果我理解正确的话,证书颁发机构还可以签署我不知道的其他证书。我的问题是,如何分辨由第三方证书颁发机构签署的证书属于我的公司,哪些不属于?

我的用例

我想启用 PIV/CAC 卡的基于证书的身份验证。所有证书均由第三方 CA 签名。我担心的是,我不认识的用户将能够使用由外部 CA 签名且不属于我公司的证书进行身份验证。

答案1

通用证书建议,我不熟悉官方 PIV/CAC 系统的设置方式:

  1. 证书具有主题CA 应该填写所有者的正确详细信息。如果您信任 CA 能够正确完成此操作,则请将系统配置为仅接受具有已知主题的用户 - 通过匹配特定属性或仅匹配整个字符串化值。

    例如,如果主题字段包含带有您域名的电子邮件地址,或者O(“组织”),那么您可能能够与之匹配。(但请注意注册重复组织名称的可能性 - 在美国,您还需要比较州或地点字段。)

    如果主题不包含任何特定于您组织的内容,那么您必须保留属于每个员工的证书主题的中央列表。(Active Directory 已经具有内置机制,可将 X.509 主题映射到 AD 用户。)

    • 确保证书详细信息的正确性实际上是 CA 的一项工作(即证书证明),所以如果你信任这个特定的第三方 CA 能够正确填写主题字段,那么您基本上不能信任该 CA。在这种情况下,您唯一的选择是将证书视为本质上是自签名的,并通过哈希匹配它们(请参阅下面的选项 4)。
  2. 如果存在 subjectAltName 扩展,则可以以相同的方式使用。根据 NIST 发布的文档,真正的 PIV/CAC 证书有一个包含卡的 CHUID 的 SAN 值。如果您将非 PIV 证书放在 PIV 卡上,则 CA 会决定添加什么 subjectAltName - 它可能包含员工的电子邮件地址等。

  3. 证书还具有序列号它在其直接兄弟之间应该是唯一的,并且 Issuer+Serial 的组合必须在全球范围内是唯一的(因此您可以将其用作标识符)。

  4. 最后,无论证书是如何颁发的,有两种常用方法可以区分各个证书:要么是整个证书的 DER 形式的哈希值(通常称为“指纹”或“拇指指纹”),要么是只有其公钥的 DER 形式的哈希值(也称为“SPKI 哈希”,因为对 SubjectPublicKeyInfo 字段进行了哈希处理)。

    使用哪个哈希取决于证书如何更新 - 如果更新继续使用相同的密钥对,则相同的 SPKI 哈希将继续识别新证书(而每次更新都会有不同的指纹);但是,这在 PIV/CAC 系统中可能并不常见,因此仅使用指纹更简单。

答案2

参考您的用例,请记住证书仅提供身份和身份验证。

授权应该由应用程序控制(例如,使用目录),而不是证书。因此,这些未知用户很可能能够向您的应用程序出示已接受的证书,但该应用程序应该拒绝他们,不是通过证书验证失败,而是通过某种形式的 ACL 失败。

例如,我的证书可能被你的 IIS 服务器接受,它现在知道加雷斯·雷德是他自称的人,但由于我没有在您的系统中注册,因此不应该允许我登录您的应用程序。

相关内容