我的一个 SSL 证书(仅简单域验证)在 Windows 2003 IIS 7.0 服务器上即将过期。
我从另一家供应商那里得到了更好的报价,而最初颁发我的证书的人不想协商更低的价格。
无论如何 - 通过 IIS 中的证书向导,我可以选择“更新”或“卸载”,然后安装新证书。
那么 - 我可以使用“续订”选项创建证书请求并将其传递给新供应商吗,还是我需要从“新”请求开始?之前的证书是由另一个签名者颁发的,这对新供应商有影响吗?
问题是,我不想因为删除旧证书并创建新的 CSR 而停止服务器(至少是安全部分),然后等待新证书安装。
或者,是否可以选择准备新的 CSR 而不删除旧证书?
答案1
您只需使用 IIS 6.0 创建一个临时网站。IIS 7.0 允许您一次创建多个待处理的请求。
IIS 7.0 实际上有一个错误,它会导致续订功能生成一个密钥非常大的 CSR(比您想要的大得多)。因此,建议您创建一个新的待处理请求,而不是选择续订选项。安装后,您只需在网站上切换 SSL 绑定,就不会有任何停机时间。这还允许您每次续订时生成一个新密钥,从而提高安全性。
证书提供商 (CA) 并不关心您使用新选项还是续订选项,并且无论您是继续使用同一个 CA 还是从新的 CA 订购,您都可以使用任一选项。
答案2
续订证书可让您在更新证书到期日期的同时保留相同的公钥和私钥。如果您必须将指纹存储在路由器或类似设备上,那么这样做的好处是。我认为续订请求需要相同的颁发 CA,因此手动生成新请求可能更容易。
生成新请求而不破坏 IIS
您可以手动创建证书请求并提交。获得新证书后,您就可以切换 IIS7 正在寻找的证书。如何手动创建 Web 服务器 SSL 证书。
该过程的简单要点是,您将创建一个包含所需信息的 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 无法理解这一点)。如果您设置了 SAN,则务必在 SAN 中包含完全限定域名(主题行的 CN)。如果您不需要多个域名,也可以完全删除扩展区域(此外,某些 CA 可能不支持)。
流程
保存上述信息后(我知道信息很多),请按以下步骤操作:
- 打开命令提示符并进入保存上述 inf 的目录。
- 跑步
certreq -new above.inf request.req
- 将 request.req 文件提交给您的 CA。他们会处理并批准/拒绝它。
- 当他们批准时,他们应该将您的公钥以 .cer 文件的形式发回给您。
- 运行
certreq -accept file-from-ca.cer
以完成密钥设置。
祝你好运!
编辑
certreq 和 inf 文件的完整语法可在以下位置找到:附录 3:Certreq.exe 语法(Windows Server 2003 SP1)。FriendlyName
和HashAlgorithm
仅适用于 Server 2008(和 R2)。您可以通过运行命令certutil -csplist
并查看输出来查看受支持的加密提供程序列表。当前的 Windows 2003 SP2 框确实将“Microsoft RSA SChannel Cryptographic Provider”列为可用提供程序,因此请确保您的文件已正确设置引号,并且该条目仅在一行上(无换行或多行)。
您还可以将 ProviderName 更改为 ProviderType 并使用 输出提供的数字certreq -csplist
。
在这种情况下,我得到以下输出:
Provider Name: Microsoft RSA SChannel Cryptographic Provider
Provider Type: 12
所以我可以使用
ProvderName = "Microsoft RSA SChannel Cryptographic Provider"
或者
ProviderType = 12
答案3
好的,为了部分回答我自己的问题 - 在不删除现有证书的情况下创建/使用新证书的部分(即不停止服务器),我找到了一个很好的描述在 Comodo 网站上- 基本上,我需要在服务器上创建一个“临时”网站,并使用它来创建一个新的 CSR、发送它进行签名,然后接收和导入证书。
然后在我的主(真实)站点上,我需要替换当前证书,然后删除临时证书。