我已经了解了如何使用 OpenSSL 生成 .csr 文件,并已成功创建、转换和安装签名证书 (.pfx 文件) 到我们的一些带有 IIS 10 的 Web 服务器上。
现在,其他人已经向我展示了如何直接从我们的其他 Web 服务器之一生成 .csr 文件 - 使用 IIS 10 中提供的“创建证书请求”功能。但是 - 使用此方法,我不必创建 .pfx 文件,并且我能够将下载的签名证书安装到 IIS 上而无需进行任何转换。所以这样做要快得多 - 但是,我不明白为什么在这种情况下使用这种方法而不是 OpenSSL。最终结果不同吗?有人可以告诉我吗?
答案1
如果您使用 IIS 控制台的创建域证书...选项,您只能使用 Microsoft ADCS 的内置 Web 服务器模板申请证书。此模板的功能非常有限,不包括Subject Alternate Name
所有现代浏览器强制要求的扩展,也不包括S/MIME Capabilities
Web 服务器证书不需要的扩展。由于这是版本 1 模板,因此您无法更改其中任何一项。
如果您选择使用 IIS 控制台的创建证书请求...选项,您将创建一个可以保存到磁盘的请求。现在您可以将请求提交给任何 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
从运行对话框)请求证书,您可以在其中使用任何启用的模板(而不仅仅是 Web 服务器)请求证书。如果 ADCS 管理员正确配置了此模板,您将获得一个具有适当Subject Alternate Name
扩展名、无S/MIME Capability
扩展名和 Web 服务器正确密钥用法的证书,然后您可以使用 IIS 的控制台将其绑定到网站。这既灵活又方便。
答案2
- OpenSSL 是外部依赖项。它不随 Windows 一起提供,您必须下载并安装该工具。
- OpenSSL 是 CLI(命令行界面)工具,没有默认的 GUI。
- OpenSSL 未与 Windows 加密子系统 (CryptoAPI) 集成。
- IIS 管理器提供了更好的用户体验(使用 UI 表单而不是 CLI),但功能有限。例如,您无法在请求中指定 SAN 扩展或配置扩展。假定 CA 服务器负责找出所需的备用名称、扩展并将它们包含在签名证书中。一些商业 CA 提供了一种表单,您可以在其中指定备用名称以及上传的请求文件。
- IIS 管理器包括与 Microsoft Active Directory 证书服务的集成,以便从内部 CA 执行直接证书注册。
尽管 OpenSSL 在请求中可以包含的内容方面提供了更大的灵活性,但它需要额外的工作来转换和正确安装所有内容。Windows 提供的certreq.exe
CLI 工具在请求生成方面提供与 OpenSSL 相同的功能。Certreq 随每个 Windows 安装一起提供,您无需安装任何东西即可使其运行。
仅当目标应用程序不支持 Microsoft CryptoAPI 且需要 PKCS#1 或 PKCS#8 格式的私钥时,才需要 OpenSSL(在 Windows 上)。由于加密堆栈设计不同,CryptoAPI 对这些格式的支持非常差。在所有其他情况下,使用内置 Windows 工具(MMC、certreq、certutil 等)执行与证书相关的操作就足够了。