如何在不破坏证书更新的情况下在X509商店中查找证书

时间:2014-06-06 13:32:06

标签: c# x509certificate2

在Web服务应用程序中,我有此功能通过其Thumbprint加载证书:

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;
}

string thumbprint是web.config文件中的一个设置。

据我所知,Thumbprint是作为整个证书的HASH计算的,因此如果证书更新,它将会改变。

X509FindType Enumeration我可以看到大约有15种不同类型的FindBy {..}比另一种更好?

在系统管理员更新证书后,如果我的设置在证书更新后仍然存在而无需更新web.config,那么查找证书的最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

您有什么证书更新?

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

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

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

答案 1 :(得分:0)

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