使用C#导入证书和链(PFX文件)

时间:2014-03-25 18:50:37

标签: c#-4.0 x509certificate2

从PKCS#12(PFX文件)如何识别集合中的证书类型以打开正确的X509Store?

X509Certificate2Collection collection = new X509Certificate2Collection();
collection.Import("mycert.pfx", "mypass", X509KeyStorageFlags.PersistKeySet);
foreach(X509Certificate2 cert in collection)
{
    // client cert? intermediate CA? root CA?
}

通常在我的场景中,客户端证书具有私钥,而根CA具有cert.Subject == cert.Issuer。这是唯一的方法吗?

1 个答案:

答案 0 :(得分:1)

我的猜测是建立一个X509Chain并跟随每个ChainElement

对于此链中的每个证书,查看它是否具有私钥。如果它有最终实体证书(我没有测试它,但链应该是分层构建的,所以任何一个终端实体将是链的第一个或最后一个元素)。

其他任何东西都应该是CA证书。但为了安全起见,我会寻找KeyUsage Certificate Signing扩展名和BasicConstraints Subject Type=CA