清楚地识别 Windows 证书存储中的证书
本文关键字:证书 存储 Windows 识别 清楚 | 更新日期: 2023-09-27 18:33:06
我正在开发一个库,用于生成XML数据并对生成的XML进行签名。我已经将 pkcs12 证书(使用 OpenSSL 从 pem 文件生成)安装到 Windows 证书存储中。
我正在从 C# 代码加载证书
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2 cert = null;
foreach (var item in store.Certificates)
{
if (item.SubjectName.Name.Contains("CN=IDENTIFIER"))
{
cert = item;
break;
}
}
store.Close();
就我而言,CN 标识符是:我的姓氏 + 姓氏。证书来自第三方。所以我认为我对标识符没有影响。
问题来了:
有没有办法从 C# 准确识别此证书。将来,多个证书可能具有相同的 X509 参数(CN 等)。
提前谢谢你。
是的,CN 可能包含相同的标识符(例如,当为商业实体颁发证书时)。
证书通常通过以下组合之一进行区分:1) 颁发者名称(不是 CN,而是 RDN,具有多个字段的完整名称记录)+ 证书序列号(在一个 CA 中是唯一的)2) 颁发者名称 + 证书哈希
如果在搜索证书之前不知道颁发者名称,则可以向用户显示找到的证书列表,并在他选择其中一个证书后存储证书哈希以供将来参考。
在较小的系统(最终用户的计算机)上,MY 存储中的证书数量通常很少,哈希冲突的可能性很小。在大型系统上,机会更高,这就是使用颁发者名称的原因。
金的答案...
X509Store
Certificates
属性是X509CertificateCollection
。
您可能会对它的Find
方法和X509FindType
感兴趣。它提供了多种搜索证书的方法。严格来说,使用者 DN 和使用者备用名称对于标识与证书关联的实体都很重要。但是,从演示的角度来看,很少有工具可以做到这一点(例如,这可能会在表格中变得非常混乱)。
正如GregS和Eugene指出的那样,证书指纹(在其他工具中也称为指纹/哈希)将唯一地识别特定的证书,而与颁发者无关。它可以与X509FindType
一起使用。
指纹在Windows/.Net/SSL世界中的多个位置使用。特别是,这是选择要安装在HTTPS端口上的给定证书的方法。