CertGetCertificateChain 什么时候可以返回多个简单证书链?

Agn*_*ian 4 cryptoapi x509certificate code-signing-certificate

为什么CertGetCertificateChain有一个设施可以返回多个“简单链”?什么是简单链条以及我应该期待哪些其他类型的链条?

在测试运行中通过如下证书......

root
  |- parent
    |- my certificate 
Run Code Online (Sandbox Code Playgroud)

...结果是一个简单的链:

0. my certificate
1. parent
2. root
Run Code Online (Sandbox Code Playgroud)

在什么情况下我们会看到多个简单链被返回?

Cry*_*t32 5

当从单个叶证书到多个 CA 证书存在多个路径时,可能会出现多个链。

这种情况发生在两种(主要)情况下:

  1. 两个或多个 CA 证书共享相同的主题和公钥。当使用相同的密钥对续订 CA 证书时会发生这种情况。这将产生两个非常相似的证书,可以用作证书路径构建中的节点。它们是不同的,但它们(因为主题和公钥是共享的)都可以用来验证颁发的证书的签名。

  2. 当交叉认证用于提供(可能)不同根证书的附加路径时。本质上与上面相同,不同之处在于该选项用于提供到不同 CA 根的路由。

单个证书链只是所有可能路径集合中的单个路径。