首页 > 解决方案 > 关于 CSR 和 SSL 证书的问题

问题描述

我正在连接到外部服务器并制作 CSR 以从他们那里接收一些证书,对此我有一些疑问。

一些教程指出您应该保存私钥,因为这将在安装证书期间使用。但是,当使用 Windows 证书管理器 (certmgr.msc) 时,我认为它会在后台生成私钥,并且生成的 CSR 文件不包含任何私钥。所以在那种情况下,我根本无法访问任何私钥,除非我可以从我以后收到的证书中导出它?我还觉得安装证书不需要私钥,因为它只是导入到证书存储中?如果是这样的话,除了生成公钥之外,私钥还有什么用处吗?

我也想知道证书可以使用的位置。似乎证书只能在创建 CSR 的服务器上使用。但是,我的应用程序将在 Azure 上运行,那么我如何才能获得可以在云中使用的证书?

最后一个问题:证书提供者提供三个证书,一个根证书、一个中间证书和一个“实际”证书。这些不同证书的目的是什么?

感谢任何对此过程的见解或指导。那里有很多指南,但其中许多似乎以某种方式相互矛盾。

标签: sslcertificatessl-certificatecsr

解决方案


(certmgr.msc) 我认为 [] 在后台生成私钥,

正确的。您生成密钥CSR,将后者发送给 CA,然后(我们希望!)取回包含您的公钥和身份的证书(对于 SSL/TLS,您的身份是您的域名),以及任何所需的链证书(通常是一个中间体和一个根,但这可能会有所不同)。您将证书导入到 certmgr,它将它与现有的、存储的但隐藏的私钥相匹配,以生成一证书+私钥,该对现在可见且可用。

要在 Windows 程序(如 IIS)中使用它,您还需要证书,见下文,在您的商店中 - 这些只是证书而不是您没有的私钥并且不能得到。如果您使用 Comodo、GoDaddy、LetsEncrypt 等已建立的公共 CA,他们的根通常已经在您的商店中,如果您使用由您的雇主运行的 CA,他们的根很可能由于其他原因(例如电子邮件)已经在您的商店中;如果没有,你应该添加它。中间体(s?)可能已经在您的商店中,也可能不在您的商店中,如果没有,您应该添加它(它们)。

我还觉得安装证书不需要私钥,因为它只是导入到证书存储中?

必需的,但您不提供它,因为它已经存在。

似乎证书只能在创建 CSR 的服务器上使用。但是,我的应用程序将在 Azure 上运行,那么我如何才能获得可以在云中使用的证书?

最初,它仅在生成 CSR 和私钥的系统上可用。但是使用 certmgr,您可以将证书和私钥的组合以及可选的证书链(导出向导称为“路径”)导出到 PKCS12/PFX 文件。该文件可以复制和导入到其他 Windows 系统和/或由其他类型的软件使用或导入到其他类型的软件,如 Java(例如 Tomcat 和 Jboss/Wildfly)、Apache、Nginx 等。

但是请注意,您可以使用证书的域名或可能与(单级)通配符匹配的名称范围是在颁发证书时确定的,并且不能随后更改(除非通过获取新证书)。

证书提供者提供三个证书,一个根证书、一个中间证书和一个“实际”证书。这些不同证书的目的是什么?

证书颁发机构按层次结构排列。运行——尤其是保护——根 CA 既困难又昂贵。因此,最终实体(如您)的证书不是由根直接颁发,而是由下级或中间 CA 颁发。有时有不止一个级别的下级或中级。因此,当您的服务器使用此证书来证明其身份时,以便浏览器或其他客户端进行验证(并因此接受)您的证书,您需要提供一个证书“链”,每个证书都由下一个签名,它将您的证书链接到受信任的根。正如我所说,一个中间体是常见的;这意味着您的服务器需要发送自己的证书,该证书由中间密钥签名,加上中间证书,该证书由根中的密钥签名。实际上不需要发送根,因为客户端已经在他们的信任库中拥有它,但它可能是,并且在使用它之前自己验证链也是可取的,为此你需要拥有根,即使你没有不要发送它。


推荐阅读