C# 如何在X509存储中查找证书而不中断证书更新

C# 如何在X509存储中查找证书而不中断证书更新,c#,x509certificate2,C#,X509certificate2,在web服务应用程序中,我使用此函数通过指纹加载证书: public static X509Certificate2 GetCertificate(string thumbprint) { X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); store.Open(OpenFlags.ReadOnly); var t = store.Certificates.Find(X509

在web服务应用程序中,我使用此函数通过指纹加载证书:

public static X509Certificate2 GetCertificate(string thumbprint)
{
    X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
    store.Open(OpenFlags.ReadOnly);
    var t = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
    if (t.Count == 0)
    {
        throw new Exception("Certificate collection is empty");
    }
    X509Certificate2 cert = t[0];
    store.Close();
    return cert;
}
字符串指纹是web.config文件中的设置

据我所知,指纹是作为整个证书的散列形式计算的,因此,如果证书更新,指纹将发生变化

从中我可以看到大约有15种不同类型的FindBy{..}一种比另一种好吗


找到证书的最佳做法是什么?在系统管理员更新证书后,我的设置将在证书更新后仍然有效,而无需更新web.config

您想要什么证书更新

您会看到证书由颁发此证书的CA签名。对此证书的任何更改都将导致签名中断,从而使证书不受信任

因此,证书的指纹永远不会更改。重新颁发证书时(即使它使用相同的私钥),它将具有不同的指纹,因为它将是一个新证书(具有新的序列号、新的验证间隔等)


在我看来,你不需要改变任何事情。指纹是识别证书的非常独特的方式。重新颁发证书时,您将安排维护,编辑配置以设置新证书的指纹,并重新启动应用程序以应用更改。

如果您有足够唯一的主题名称可供搜索(
FindBySubjectName
),则在证书续订期间应保持稳定,因此,您不必每次更新证书时都更新代码或配置,这可能不够频繁,以至于每个人都会忘记所有涉及的部分。如果您将搜索类型和搜索值都放在一个配置系统中,该配置系统至少与证书续订一样易于维护,那么您就可以让devops员工(非开发人员)或最终用户来处理它。

按友好名称查找即可。