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上如此不一致?
我认为
问题可能是您的用户对证书没有权限
试试这个
- 下载并安装:Windows HTTP 服务证书Configuration Tool (WinHttpCertCfg.exe)http://www.microsoft.com/en-us/download/details.aspx?id=19801
- 并运行: WinHttpCertCfg.exe -g -c LOCAL_MACHINE''Store -s "IssuedToName"-一个"帐户名称"
请验证证书是否确实位于您插入它的本地计算机''我的存储中。我假设您会在存储中找到该证书,但是当您双击它时,您将看到这是不受信任的。我的假设是证书链没有构建到受信任的根 CA。
现在,修改您的代码以搜索证书(我已将最后一个参数更改为 false)
var certificates = store.Certificates.Find(X509FindType.FindByThumbprint, commandLineArgs.CertificateThumbprint, false);
或(恕我直言,更好)通过将 CA 证书导入适当的存储(根、中间颁发机构)来信任导入的证书。