为什么即使证书存在,x509Store.Certificates.Find 也返回空集合?

问题描述 投票:0回答:1

我的系统帐户下的证书存储中存储了一个 X509Certificate,我已使用 Run -> mmc 对其进行了可视化验证。

以下代码成功显示我的证书:

using (var x509Store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
 {
     x509Store.Open(OpenFlags.ReadOnly);

     X509Certificate2Collection certificateCollection1 = x509Store.Certificates;

     Console.WriteLine($"Listing all available certificates count: {certificateCollection1.Count}");

     foreach (var certificate2 in certificateCollection1)
     {
         Console.WriteLine($"Subject: {certificate2.Subject}");
         Console.WriteLine($"Issuer: {certificate2.Issuer}");
         Console.WriteLine($"Thumbprint: {certificate2.Thumbprint}");
         Console.WriteLine("-------------------------------");
  

但是,当我使用以下任一方法时:

certificateCollection = x509Store.Certificates.Find(X509FindType.FindBySubjectDistinguishedName, certificate2.Subject, true);

certificateCollection = x509Store.Certificates.Find(X509FindType.FindBySubjectName, certificate2.GetNameInfo(X509NameType.SimpleName, false), true);

然后当我尝试显示我的证书集合属性时,计数为 0

Console.WriteLine($"Listing all available internal certificates count: {certificateCollection.Count}");
writer.WriteLine($"Listing all available internal certificates count: {certificateCollection.Count}");

我使用相同的主题名称或证书名称来显示证书列表,但它返回 0。这在我的机器上运行良好,但是当相同的代码部署到生产机器时,其中一些无法找到证书。当机器上存在证书并使用相同的名称进行查找时(我确信我没有拼写错误,因为我使用的是 X509Certificate2Collection 返回的相同变量),它会返回一个空集合。

我想了解 x509Store.Certificates.Find 方法做错了什么。

c# .net x509certificate mmc certificate-store
1个回答
0
投票

原因之一是 X509Certificate2Collection.Find(X509FindType, Object, Boolean) 方法的最后一个参数

validOnly
设置为
true
。如果您的证书链无效,则方法将不会返回任何内容。尝试将最后一个参数设置为
false
,看看结果是否会有差异。

© www.soinside.com 2019 - 2024. All rights reserved.