每年更新的证书 - 如何在证书商店中可靠地找到它们?

Certificates being renewed yearly - how to reliably find them in the cert store?

我的任务是通过证书为我们从 ASP.NET 4.0 Webforms 应用程序调用的外部 Web 服务增加安全性。

我已经能够使用证书并让代码正常工作,但是在部署该解决方案时仍有很多问题没有得到解答。我对实际使用(和处理)证书还很陌生——我理解它们背后的基本理论,只是我自己从来没有用过它们。

该服务是一家公司提供的外部 REST 网络服务,该公司还颁发证书 - 这些证书每年都会过期,需要每年续订。因此 "baking" 将它们作为内部资源放入 ASP.NET 应用程序似乎不是一个好主意。

我倾向于将它们放入 Windows 2008 服务器上的证书库中。这很好用,但我不确定:如何从代码中查找 适当的证书?我知道 X509Certificate2X509Store 类 - 但我应该搜索什么 criteria

如果必须每年更新该证书,什么项目(序列号?指纹?)将保持不变?或者我是否必须在每次续订证书时更新我的​​配置并存储新的序列号或指纹?

如果我理解正确,您需要确保您使用的是正确的网络服务。

您正在使用 https 连接到 REST 服务。它是 WCF 服务还是 Web API?无论哪种方式,Web 服务器都将处理 SSL 部分(嗯,仅当托管在 Web 服务器上而不是自托管时)。因此,如果我们让它变得简单,那么 Web 服务将托管在 Web 服务器上。 Web 服务器将处理建立 SSL 连接并将向您发送服务器证书。

然后您需要检查您是否正在与正确的网络服务器通信。您的选择是:

  1. 使用指纹手动更新配置文件,每次更新 Web 服务器的证书时指纹都会更改。当他们更新证书时,序列号也会改变。
  2. 如果主题备用名称(SAN = 证书中的扩展名)或 CN(当 SAN 不在证书中时)中的(Web 服务器的)DNS 名称正确,则检查主题中的通用名称或更好的名称
  3. 从 Web 服务器的证书构建证书链(使用 X509Chain.Build 方法)并检查它是否包含您嵌入到 ASP.NET 应用程序中的 CA 证书,或者它是否与给定的 CA 指纹相匹配你配置。

1) - 可以,但您必须确保每年更新配置文件

2) - 在他们更改 Web 服务器的 DNS 名称之前会很好地工作,但这会导致您的 web.config 发生更改,所以......它会起作用。需要注意的一件事是,使用标准 .NET 框架从 X509Certificate2 class 中提取任何扩展并不容易。您需要转到 ASN.1 级别或使用一些可以以友好方式提取 SAN 的加密库。

3) - 会很好用。您可以使用根 CA 证书或专用中间 CA 证书。您必须确保要构建的证书链信任 Web 服务器证书,但这通常适用于所有解决方案。它会工作很长时间,因为 CA 证书的颁发时间为 20-30 年。