C#-每次重新颁发SSL证书时,都需要更改应用程序中的序列号

C#-每次重新颁发SSL证书时,都需要更改应用程序中的序列号,c#,ssl,webapi,self-host-webapi,C#,Ssl,Webapi,Self Host Webapi,我使用下面的代码在C#web API中配置SSL证书。问题是我正在使用序列号查找SSL证书,每次Infra重新发布SSL证书时,我都必须在应用程序配置中更新证书序列号。是否有证书属性在重新发布后保持不变 X509Store store = new X509Store(StoreLocation.LocalMachine); store.Open(OpenFlags.ReadOnly); X509Certificate2Collection certificates = store.Cer

我使用下面的代码在C#web API中配置SSL证书。问题是我正在使用序列号查找SSL证书,每次Infra重新发布SSL证书时,我都必须在应用程序配置中更新证书序列号。是否有证书属性在重新发布后保持不变

X509Store store = new X509Store(StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);    
X509Certificate2Collection certificates = store.Certificates.Find(
                                                X509FindType.FindBySerialNumber,
                                                sslCertificateSerialNumber,
                                                false);

“sslCertificateSerialNumber”来自配置文件

您可以使用findBySubjectName,因为它更有用。如果你有多个主题,你可以这样做:

        X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine);
        store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
        X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
        foreach (X509Certificate2 x509 in collection)
        {
            if (x509.Thumbprint == "5550541D10488D148BCAC0D289DED441609849FF")
            {
                client.ClientCredentials.ClientCertificate.SetCertificate(
                 x509.SubjectName.Name, store.Location, StoreName.TrustedPeople);
            }
        }

现在还不清楚您在这里尝试实现什么用例,即为什么首先要从存储中查找证书,以及您要使用的证书应该具有哪些属性。这就像是根据出生日期挑选一个人,然后询问是否有其他可能的条件来挑选这个人——没有任何其他上下文,这个人应该具有什么属性。我正在配置web API以在HTTPS上运行。我在上面的代码中找到了要通过序列号绑定的SSL证书。我正在寻找一些其他财产,将不会改变重新发行。请注意,我不想将证书绑定到端口。基本上,您是在说您想要其他的东西,而没有说在您的用例中什么是唯一的标准。例如,鉴于您对现有答案的评论,该主题不可用。你真的希望其他人只是猜测每一件可能有用的事情,然后你回来说“不,也不起作用,因为它不是唯一的”?请查看您拥有的证书,找出什么是唯一的,没有人知道您的证书。“是否有任何证书属性在重新颁发后保持不变?”-您(可能)有两个或多个证书可供您使用并可以检查。谢谢。但是在我的服务器上有多个具有相同主题名称的证书哦,好的,我根据你的评论更改了我的答案。