这是我的简单方法:
private static X509Certificate2 GetCertificateFromStore(StoreLocation storeLocation, string certName) {
var store = new X509Store(StoreLocation.LocalMachine);
try {
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindBySubjectName, certName, true);
return certs.Count == 0 ? null : certs[0];
}
finally {
store.Close();
}
}
调试本地显示已加载store.Certificates
并包含两个证书 - 默认的“localhost”一个和一个我导入的,因此正确的商店已成功打开。
但是,Find()
方法始终返回空结果,无论我搜索哪个证书以及我是使用FindBySubjectName
还是FindByThumbprint
。
任何想法都可能出错?这是一个简单的控制台应用程序,仅为学习和创建的目的而创建。测试证书加载,即项目配置中的任何其他内容或其他任何地方都不是默认值。
答案 0 :(得分:3)
尝试使用false作为store.Certificates.Find()方法的第三个参数 - 您的证书可能无效且被排除在外。