X509存储证书.查找查找指纹

本文关键字:查找 指纹 证书 存储 X509 | 更新日期: 2023-09-27 17:56:20

我在使用商店时遇到问题。我正在使用带有NET 3.5的Windows server 2008 R2。证书由

public static void AddCertificate(X509Certificate2 cert, StoreName name = StoreName.My, StoreLocation location = StoreLocation.LocalMachine)
    {
        var store = new X509Store(name, location);
        store.Open(OpenFlags.ReadWrite);
        store.Add(cert);
        store.Close();
    }

之后,通过以下方式查找证书

string certThumbprint = "XXXX";
var certificates = store.Certificates.Find(X509FindType.FindByThumbprint, commandLineArgs.CertificateThumbprint, true);
if (certificates.Count == 0)
  {
    throw new ArgumentException("No certificate found with given thumbprint.");
  }

根本不应该抛出异常,但有时似乎会抛出异常。它每 100 次运行引发大约 5 次异常。

我已经用谷歌搜索并发现了"不可见的第一个字符"问题,但就我而言,指纹确实是硬编码的。我没有从任何地方阅读指纹。在带有NET.4.5的Windows Server 2012上运行的确切代码从未给我带来任何问题。这仅适用于带有NET.3.5的Windows服务器。我想知道为什么结果仅在WS2008R2上如此不一致?

X509存储证书.查找查找指纹

我认为

问题可能是您的用户对证书没有权限

试试这个

  1. 下载并安装:Windows HTTP 服务证书Configuration Tool (WinHttpCertCfg.exe)http://www.microsoft.com/en-us/download/details.aspx?id=19801
  2. 并运行: WinHttpCertCfg.exe -g -c LOCAL_MACHINE''Store -s "IssuedToName"-一个"帐户名称"

请验证证书是否确实位于您插入它的本地计算机''我的存储中。我假设您会在存储中找到该证书,但是当您双击它时,您将看到这是不受信任的。我的假设是证书链没有构建到受信任的根 CA。

现在,修改您的代码以搜索证书(我已将最后一个参数更改为 false

var certificates = store.Certificates.Find(X509FindType.FindByThumbprint, commandLineArgs.CertificateThumbprint, false);

或(恕我直言,更好)通过将 CA 证书导入适当的存储(根、中间颁发机构)来信任导入的证书。