清楚地识别 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 等)。

提前谢谢你。

清楚地识别 Windows 证书存储中的证书

是的,CN 可能包含相同的标识符(例如,当为商业实体颁发证书时)。

证书通常通过以下组合之一进行区分:1) 颁发者名称(不是 CN,而是 RDN,具有多个字段的完整名称记录)+ 证书序列号(在一个 CA 中是唯一的)2) 颁发者名称 + 证书哈希

如果在搜索证书之前不知道颁发者名称,则可以向用户显示找到的证书列表,并在他选择其中一个证书后存储证书哈希以供将来参考。

在较小的系统(最终用户的计算机)上,MY 存储中的证书数量通常很少,哈希冲突的可能性很小。在大型系统上,机会更高,这就是使用颁发者名称的原因。

扩展尤

金的答案...

X509Store Certificates属性是X509CertificateCollection

您可能会对它的Find方法和X509FindType感兴趣。它提供了多种搜索证书的方法。严格来说,使用者 DN 和使用者备用名称对于标识与证书关联的实体都很重要。但是,从演示的角度来看,很少有工具可以做到这一点(例如,这可能会在表格中变得非常混乱)。

正如GregS和Eugene指出的那样,证书指纹(在其他工具中也称为指纹/哈希)将唯一地识别特定的证书,而与颁发者无关。它可以与X509FindType一起使用。

指纹在Windows/.Net/SSL世界中的多个位置使用。特别是,这是选择要安装在HTTPS端口上的给定证书的方法。