3

这是我的简单方法:

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();
    }
}

Debug locals 显示store.Certificates已加载并包含两个证书 - 默认的“localhost”一个和一个我已导入,因此正确的存储已成功打开。

但是,Find()无论我搜索哪个证书以及是否使用FindBySubjectName或,该方法总是返回一个空结果FindByThumbprint

有什么想法可能是错的吗?它是一个简单的控制台应用程序,仅用于学习和测试证书加载,即项目配置或其他任何地方几乎没有默认设置。

4

1 回答 1

4

尝试将 false 作为 store.Certificates.Find() 方法的第三个参数 - 您的证书可能无效并且被排除在外。

于 2013-01-23T16:00:20.957 回答