X509Store证书寻找FindByThumbprint

3

当我使用store.Certificates.Find时,遇到了问题。我正在使用安装有.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上如此不一致?
2个回答

0

我认为问题可能是您的用户没有证书权限

请尝试以下步骤:

  1. 下载并安装:Windows HTTP 服务证书配置工具(WinHttpCertCfg.exe)http://www.microsoft.com/en-us/download/details.aspx?id=19801
  2. 运行:WinHttpCertCfg.exe -g -c LOCAL_MACHINE\Store -s "IssuedToName" -a "AccountName"

0
请确认您插入的证书确实在LocalMachine\My存储中。我假设您会在存储中找到证书,但是当您双击它时,您会发现它不被信任。我的假设是证书链没有建立到受信任的根CA。
现在,请修改您的代码以搜索证书(我已将最后一个参数更改为false)。
var certificates = store.Certificates.Find(X509FindType.FindByThumbprint, commandLineArgs.CertificateThumbprint, false);

或者(在我看来更好的选择)通过将导入的证书导入到适当的存储区(根、中间机构)使导入的证书受信任。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接