【问题标题】:Find certificate by thumbprint通过指纹查找证书
【发布时间】:2014-07-03 12:41:32
【问题描述】:

系统无法通过字符串指纹找到证书

       var thumbprint = "‎2E7F6E8A0124E6745C3999EE15770C0A4931F342";
        X509Certificate2 certificate = new X509Certificate2();
        X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser);
        store.Open(OpenFlags.OpenExistingOnly);
        var c = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false).OfType<X509Certificate>().FirstOrDefault();

这个核心返回空值。不过我也试试这个

foreach (X509Certificate2 mCert in store.Certificates)
        {

           var c= store.Certificates.Find(X509FindType.FindByThumbprint, mCert.Thumbprint, false).Count;
        }

c 始终为 1 ,因此字符存在一些问题。我复制了这个指纹值。

【问题讨论】:

  • 指纹值中是否有前导空格?出于某种原因,在某些情况下,它会显示一个 - 根据我的经验 - 如果您使用证书管理单元,但这不是指纹的一部分。
  • 这是值 var thumbprint="‎2E7F6E8A0124E6745C3999EE15770C0A4931F342"
  • 看到这个问题,也许它可以帮助:stackoverflow.com/questions/8448147/…
  • 下面的链接会帮助你stackoverflow.com/questions/11115511/…

标签: c# .net x509certificate


【解决方案1】:

以下对我有用:

    public async Task<X509Certificate2> GetCertificate(string certificateThumbprint)
    {
        var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
        store.Open(OpenFlags.ReadOnly);
        var cert = store.Certificates.OfType<X509Certificate2>()
            .FirstOrDefault(x => x.Thumbprint == certificateThumbprint);
        store.Close();
        return cert;
    }

【讨论】:

  • 为什么方法 GetCertificate 是异步的?
  • 这绝对是比 .Find() 更好的方法。
猜你喜欢
  • 2012-09-18
  • 2014-07-10
  • 2012-06-22
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 2010-11-08
  • 2013-12-03
  • 1970-01-01
相关资源
最近更新 更多