我已经了解了如何使用 OpenSSL 生成 .csr 文件,并且已经成功地创建、转换并安装了签名证书(.pfx 文件)到我们使用 IIS 10 的一些 Web 服务器上。
现在,其他人向我展示了如何直接从我们的其他 Web 服务器之一生成 .csr 文件 - 使用 IIS 10 中可用的“创建证书请求”功能。但是 - 使用这种方法,我没有创建一个 .pfx 文件,我能够将下载的签名证书安装到 IIS 上,而无需进行任何转换。所以这样做要快得多 - 但是,我不明白为什么在这种情况下使用这种方法而不是 OpenSSL。最终结果不同吗?有人可以启发我吗?
尽管 OpenSSL 在请求中包含的内容方面提供了更大的灵活性,但它需要额外的工作来转换和正确安装所有内容。Windows 提供
certreq.exe
CLI 工具,该工具在请求生成方面提供与 OpenSSL 相同的功能。Certreq 随每个 Windows 安装一起提供,您无需安装任何东西即可使其正常工作。仅当目标应用程序不支持 Microsoft CryptoAPI 并且需要 PKCS#1 或 PKCS#8 格式的私钥时,才需要 OpenSSL(在 Windows 上)。由于不同的加密堆栈设计,CryptoAPI 对这些格式的支持很糟糕。在所有其他情况下,使用内置的 Windows 工具(MMC、certreq、certutil 等)来执行与证书相关的操作就足够了。
如果您使用 IIS 控制台的Create Domain Certificate...选项,您只能使用 Microsoft ADCS 的内置 Web 服务器模板请求证书。此模板的功能非常有限,不包括
Subject Alternate Name
所有现代浏览器要求的S/MIME Capabilities
扩展,还包括 Web 服务器证书不需要的扩展。由于这是版本 1 模板,您无法更改其中任何一个。如果您选择使用 IIS 控制台的Create Certificate Request...选项,您将创建一个可以保存到磁盘的请求。您现在可以将请求提交给任何 CA。如果您选择 Windows ADCS,您可以使用
certreq.exe
带有选项的实用程序-attrib "CertificateTemplate:<template short name>
来指定不同的模板。您甚至可以使用一些极客来Subject Alternate Name
为请求添加扩展(或任何其他扩展),但这需要一些努力并了解 X.509 证书的内部工作原理!如果您使用 OpenSSL 创建证书请求,您可以请求 OpenSSL 能够创建的任何字段或扩展名 - 这几乎涵盖了所有内容。您可以将此请求提交给 ADCS CA,
certreq.exe
也可以将请求提交给非 Windows CA。收到证书后,您需要将其与其私钥配对以创建导入服务器的 PKCS#12(或 PFX)文件。这相当复杂,但如果需要,您的证书请求可以非常灵活。但是,一个更简单的选项(似乎您没有显示)是使用服务器(不是 IIS)证书管理控制台(
certlm.msc
来自“运行”对话框)请求证书,您可以在其中使用任何启用的模板(不仅仅是网络服务器)。如果 ADCS 管理员正确配置了此模板,您将获得具有适当Subject Alternate Name
扩展名、无S/MIME Capability
扩展名和 Web 服务器正确密钥用法的证书,然后您可以使用 IIS 控制台简单地绑定到网站。这既灵活又方便。