IIS 7.0 – SSL证书 – 续订还是新的?

我的一个SSL证书(仅限简单域validation)即将在Windows 2003 IIS 7.0服务器上过期。

我从另外一家供应商那里得到了更好的报价,而最初签发我的证书的人不想谈判更低的价格。

无论如何 – 通过IIS中的证书向导,我可以select“更新”或“卸载”,然后安装新的证书。

所以 – 我可以使用“更新”选项创build一个证书请求,并将其传递给新的供应商,或者我需要从“新”请求开始? 对于新供应商来说,以前的证书是否由另一个签名者签发?

问题是,我不想停止服务器(至less是安全部分),因为删除了旧的证书并创build了新的CSR,并等待新的证书安装。

或者,是否可以select在不删除旧证书的情况下准备新的CSR?

您只需要使用IIS 6.0创build一个临时网站。 IIS 7.0允许您一次创build多个挂起的请求。

IIS 7.0实际上有一个错误,导致更新function生成一个非常大的关键(比你想要的大得多)的CSR。 因此,build议您创build新的挂起请求,而不是select续订选项。 安装完成后,只需在网站上切换SSL绑定,就不会有任何停机。 这也使您可以在每次续约时生成新密钥,从而提高安全性。

证书提供者(CA)不在乎您是使用新选项还是使用续订选项,无论您是使用相同的CA还是使用新的选项,都可以使用任一选项。

更新证书使您可以在更新证书的到期date的同时保持相同的公钥和私钥。 这样做的好处是,如果你不得不把指纹存储在路由器或其他东西。 我相信,更新请求需要相同的发证CA,因此手工生成新的请求可能会更容易。

生成一个新的请求,而不会把IIS吹起来

您可以手动创build证书请求并提交。 一旦你得到新的证书,你就可以切换IIS7正在寻找的证书。 如何手动创buildWeb服务器SSL证书 。

该过程的简单要点是您将创build一个包含所需信息的inf文件,运行certreq -new file.inf file.req 。 一旦你有请求文件,你可以提交给你要颁发你的证书的CA,然后接受他们发送给你的公钥,命令certreq -accept file-from-ca.req

示例request.inf

 [Version] Signature="$Windows NT$" [NewRequest] Subject = "CN=fully.qualified.domain.name, OU=Organizational Unit, O=Company, L=City, S=State, C=Country" KeySpec = 1 KeyLength = 2048 HashAlgorithm = SHA256 Exportable = FALSE MachineKeySet = TRUE SMIME = FALSE PrivateKeyArchive = FALSE UserProtected = FALSE UseExistingKeySet = FALSE RequestType = PKCS10 KeyUsage = 0xa0 ProviderName = "Microsoft RSA SChannel Cryptographic Provider" FriendlyName = "" [EnhancedKeyUsageExtension] OID=1.3.6.1.5.5.7.3.1 ; Server Authentication [RequestAttributes] CertificateTemplate = WebServer [Extensions] 2.5.29.17 = "{text}" _continue_ = "DNS=&" _continue_ = "DNS=" 

上面的示例inf是我在内部为自己的CA使用的,但可以适用于大多数环境。 如果您想要归档密钥,可以将Exportable设置为TRUE。 FriendlyName是完全可选的, Extensions部分用于使用备用DNS名称(主题备用名称)。

SAN条目的一个例子是:

 [Extensions] 2.5.29.17 = "{text}" _continue_ = "DNS=example.com&" _continue_ = "DNS=www.example.com&" _continue_ = "DNS=secure.example.com" 

这将允许您使用上述三个站点相同的证书没有它抱怨名称不匹配(在现代浏览器 – 我不认为IE6了解它)。 如果您设置完全限定的域名(主题行的CN),请务必在SAN中包含这一点。 如果您不需要多个域名(也有些CA可能不支持),则可以完全删除扩展区域。

这个过程

一旦你有上面的信息保存(我知道这是很多)。 按着这些次序:

  1. 打开命令提示符,然后进入保存上面的inf的目录。
  2. 运行certreq -new above.inf request.req
  3. 将request.req文件提交给您的CA. 他们会处理它并批准/拒绝它。
  4. 当他们批准它时,他们应该把你的公钥发回给.cer文件。
  5. 运行certreq -accept file-from-ca.cer完成设置密钥。

祝你好运!

编辑

certreq和inf文件的完整语法可以在附录3:Certreq.exe语法(Windows Server 2003 SP1)中find 。 FriendlyNameHashAlgorithm仅是Server 2008(和R2)。 您可以通过运行certutil -csplist命令并查看输出来查看受支持的encryption提供程序的列表。 当前的Windows 2003 SP2框中没有列出“Microsoft RSA SChannel Cryptographic Provider”作为可用的提供程序,因此请确保您的文件具有正确设置的引号,并且该条目仅在一行中(不包装或多行)。

您也可以将ProviderName更改为ProviderType,并使用certreq -csplist输出提供的certreq -csplist

在这种情况下,我得到以下输出:

 Provider Name: Microsoft RSA SChannel Cryptographic Provider Provider Type: 12 

所以我可以使用

 ProvderName = "Microsoft RSA SChannel Cryptographic Provider" 

要么

 ProviderType = 12 

好的,为了部分地回答我自己的问题 – 创build/使用新证书而不删除现有证书(即不停止服务器)的一部分,我在Comodo网站上find了一个很好的描述 – 基本上我需要创build一个“临时”网站在服务器上,使用它创build一个新的CSR,发送它进行签名,并接收和导入证书。

然后在我的主(真实)网站上,我需要replace当前的证书,然后删除临时的。