从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。这是唯一的方法吗?
答案 0 :(得分:1)
我的猜测是建立一个X509Chain并跟随每个ChainElement。
对于此链中的每个证书,查看它是否具有私钥。如果它有最终实体证书(我没有测试它,但链应该是分层构建的,所以任何一个终端实体将是链的第一个或最后一个元素)。
其他任何东西都应该是CA证书。但为了安全起见,我会寻找KeyUsage Certificate Signing
扩展名和BasicConstraints Subject Type=CA
。