在受信任的发布者存储中找不到证书



我想通过指纹在StoreLocation.LocalMachine中找到证书,但是,我发现如果我不指定StoreName,我什么也得不到:

certStore = new X509Store(StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certCollection = certStore.Certificates.Find(
     X509FindType.FindByThumbprint, thumbprint, false);
// always find nothing, no matter runs as Administrator or not.

但是如果我在初始化 X509Store 时指定StoreName,我可以找到证书。

certStore = new X509Store(StoreName.TrustedPublisher, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certCollection = certStore.Certificates.Find(
   X509FindType.FindByThumbprint, thumbprint, false);

MSDN 没有说明X509Store构造函数之间的区别,如果未指定StoreName,是否意味着它会在所有存储名称中进行搜索?对我来说似乎不是这样。

我研究了 .NET 源代码,当调用者未指定StoreName时,X509Store使用StoreName.My。MSDN 对此行为只字未提。

如果您查看源代码,如果您不指定商店位置,就像下面的代码一样:

certStore = new X509Store(StoreLocation.LocalMachine);

然后构造函数将使用Store.My

public X509Store (StoreLocation storeLocation) : this ("MY", storeLocation) {}

相关内容

  • 没有找到相关文章

最新更新