从 OpenSSL 和 IIS 生成 CSR 文件有什么区别?

从 OpenSSL 和 IIS 生成 CSR 文件有什么区别?

我已经了解了如何使用 OpenSSL 生成 .csr 文件,并已成功创建、转换和安装签名证书 (.pfx 文件) 到我们的一些带有 IIS 10 的 Web 服务器上。

现在,其他人已经向我展示了如何直接从我们的其他 Web 服务器之一生成 .csr 文件 - 使用 IIS 10 中提供的“创建证书请求”功能。但是 - 使用此方法,我不必创建 .pfx 文件,并且我能够将下载的签名证书安装到 IIS 上而无需进行任何转换。所以这样做要快得多 - 但是,我不明白为什么在这种情况下使用这种方法而不是 OpenSSL。最终结果不同吗?有人可以告诉我吗?

答案1

如果您使用 IIS 控制台的创建域证书...选项,您只能使用 Microsoft ADCS 的内置 Web 服务器模板申请证书。此模板的功能非常有限,不包括Subject Alternate Name所有现代浏览器强制要求的扩展,也不包括S/MIME CapabilitiesWeb 服务器证书不需要的扩展。由于这是版本 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

  1. OpenSSL 是外部依赖项。它不随 Windows 一起提供,您必须下载并安装该工具。
  2. OpenSSL 是 CLI(命令行界面)工具,没有默认的 GUI。
  3. OpenSSL 未与 Windows 加密子系统 (CryptoAPI) 集成。
  4. IIS 管理器提供了更好的用户体验(使用 UI 表单而不是 CLI),但功能有限。例如,您无法在请求中指定 SAN 扩展或配置扩展。假定 CA 服务器负责找出所需的备用名称、扩展并将它们包含在签名证书中。一些商业 CA 提供了一种表单,您可以在其中指定备用名称以及上传的请求文件。
  5. IIS 管理器包括与 Microsoft Active Directory 证书服务的集成,以便从内部 CA 执行直接证书注册。

尽管 OpenSSL 在请求中可以包含的内容方面提供了更大的灵活性,但它需要额外的工作来转换和正确安装所有内容。Windows 提供的certreq.exeCLI 工具在请求生成方面提供与 OpenSSL 相同的功能。Certreq 随每个 Windows 安装一起提供,您无需安装任何东西即可使其运行。

仅当目标应用程序不支持 Microsoft CryptoAPI 且需要 PKCS#1 或 PKCS#8 格式的私钥时,才需要 OpenSSL(在 Windows 上)。由于加密堆栈设计不同,CryptoAPI 对这些格式的支持非常差。在所有其他情况下,使用内置 Windows 工具(MMC、certreq、certutil 等)执行与证书相关的操作就足够了。

相关内容