使用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次异常。
我用Google搜索并找到了"隐形的第一个字符"问题,但在我的情况下,指纹确实是硬编码的。我不是从任何地方阅读指纹。 使用NET.4.5在Windows Server 2012上运行的确切代码从未给我任何问题。这仅适用于使用NET.3.5的Windows服务器。我想知道为什么结果只在WS2008R2上如此不一致?
答案 0 :(得分:0)
我认为问题可能是您的用户没有证书的权限
试试这个
答案 1 :(得分:0)
请确认证书确实存在于LocalMachine \ My Store中。我假设您将在商店中找到证书,但是当您双击它时,您将看到,这是不可信的。我的假设是证书链没有构建到受信任的根CA.
现在,修改您的代码以搜索证书(我已将最后一个参数更改为 false )
var certificates = store.Certificates.Find(X509FindType.FindByThumbprint, commandLineArgs.CertificateThumbprint, false);
或(恕我直言)更好地通过将CA证书导入适当的商店(Root,Intermediate authority)来使导入的证书受信任。