C# 如何使用友好的名称而不是指纹获取X509证书?

C# 如何使用友好的名称而不是指纹获取X509证书?,c#,x509certificate,C#,X509certificate,我有一个证书,它也有友好的名称,我想得到证书使用友好的名称,而不是指纹。我没有看到任何像FindByFriendlyName…这样的方法,如何做到这一点 内置搜索只能针对静态字段进行,对于任何给定的证书,这些字段都不会更改。友好名称不是静态的,它可以为任何单个证书无限次更改。因此,我强烈建议不要依赖cert友好名称。永远 您可以通过枚举所有证书并检查匹配的证书来进行手动筛选,但这是一种非常糟糕且脆弱的方法。如果您想要在证书续订期间具有稳定的搜索值且易于阅读的内容,您可以尝试使用主题名称(如果证

我有一个证书,它也有友好的名称,我想得到证书使用友好的名称,而不是指纹。我没有看到任何像
FindByFriendlyName…
这样的方法,如何做到这一点


内置搜索只能针对静态字段进行,对于任何给定的证书,这些字段都不会更改。友好名称不是静态的,它可以为任何单个证书无限次更改。因此,我强烈建议不要依赖cert友好名称。永远


您可以通过枚举所有证书并检查匹配的证书来进行手动筛选,但这是一种非常糟糕且脆弱的方法。

如果您想要在证书续订期间具有稳定的搜索值且易于阅读的内容,您可以尝试使用主题名称(如果证书有一个像样的主题名称,而不是
localhost
或其他名称):


(您可能也只需要有效/未过期的证书,所以使用
true
作为最后一个参数。)

好的。明白了。谢谢您的回答!这似乎有点极端。实际上,友好名称不会更改,除非有人更改,这很少见,而且可能表明证书上的权限过于宽松。
 var thumbprint ="f454......"
 var friendlyName = "ASP.NET Core...."    

 X509Certificate2Collection signingCerts = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
            X509Certificate2Enumerator enumerator = signingCerts.GetEnumerator();
var subject ="org name signing cert......"
var friendlyName = "ASP.NET Core...."    

X509Certificate2Collection signingCerts = store.Certificates.Find(X509FindType.FindBySubjectName, subject, true);
        X509Certificate2Enumerator enumerator = signingCerts.GetEnumerator();