【问题标题】:How to create a csr file for azure web app如何为 azure web 应用程序创建 csr 文件
【发布时间】:2016-02-15 12:14:36
【问题描述】:

我需要创建一个 csr 文件给别人。

csr 文件用于 azure Web 应用的 SSL 证书。

当我用谷歌搜索时,我发现关于生成 csr 文件的在哪里的信息不一致。

一些消息来源说:我必须在运行 Web 应用程序的服务器上创建 csr 文件。

在我的情况下,Azure 上的服务器是未知的。我不能在那里运行任何东西......

或者是否可以在我的本地电脑上创建包含所有公司数据的 csr + 用自定义域填写的主题?

【问题讨论】:

    标签: azure ssl csr azure-web-app-service


    【解决方案1】:

    openssl 安装在控制台中,您可以在那里生成文件。您必须在 openssl 的原始命令中指定所有必要的设置,因为它应该会提示您提出问题,但目前它不起作用。所以是这样的:

    openssl req -new -newkey rsa:2048 -nodes -out yoursite_com.csr -keyout yoursite_com.key -subj "/C=US/ST=California/L=San Francisco/O=Your Site Inc./OU=Engineering/CN=yoursite.com"

    一旦你有了你的 csr,你就不能从控制台打开它,你实际上必须使用 Kudu(点击高级工具)打开文件并复制内容。

    【讨论】:

    • 您需要小心存储密钥文件的位置 (yoursite_com.key),因为并非所有文件夹都被平等地保留,因此您可能会丢失文件。另一方面,您最终可能会将您的密钥文件作为应用服务的一部分提供。
    【解决方案2】:

    其他人就这些事实提供了宝贵的见解:

    • 您可以(在 Azure Web App 的情况下,基本上必须)在与目标服务器(将使用证书的那个)不同的机器上生成 CSR。
    • 可用于生成 CSR 的工具(例如 openssl、DigiCert 实用程序)。
    • 另一种获取 Azure Web App 证书的方法(Azure App Certificate Service)。

    也许我遗漏了一些东西,但我没有看到答案:

    1. 为什么要(甚至应该)在目标机器上生成 CSR?
    2. 为什么实际上不必这样做?

    我回答这两个问题的方法首先是这样一个事实,即生成 CSR 实际上是一个过程,它会产生两个工件,其中显而易见的部分 - 证书请求 - 对于这个问题可能不太重要。更重要的,实际上也必须首先出现的是正在生成的 RSA 密钥对,其中公共部分用于 CSR 请求,而私有部分是使用密钥的整个目标的关键部分证书。

    虽然密钥对通常是使用基于硬件的熵数据生成的,因此特定于您使用的机器,但结果(密钥对)可以在任何地方使用,因为密钥值仅在数学上绑定到每个其他。 CSR 内容基于公钥和请求证书的主题,所以同样,其中没有任何内容,不能在其他地方使用。这解释了为什么在不同的机器/服务上实际生成 CSR(和密钥)没有技术限制,而不是实际使用它的机器/服务,因此解决了第 2 个问题。

    问题 1 的答案来自私钥的关键特征,它是在这个过程中生成的。这个关键特征是它应该保持私有。理想的情况是只有证书身份的唯一用户才能使用它。该“用户”将是目标服务(Web 服务器)。当您在其他地方生成密钥时,您有责任在该环境中保护它并传输到目标。这通常是不必要的风险。建议的解决方案通常是在目标证书/密钥存储中生成密钥,并使用私钥保护,防止从存储中提取(导出)私钥。甚至目标服务(Web 服务器)实际上也无法提取/读取它(但能够使用它)。由于密钥对是在 CSR 创建过程中生成的,这意味着该过程应该在该存储所在的位置并由该存储功能执行。这应该回答这个问题。附带说明一下,DigiCert 工具和 IIS 管理器 UI 正在使用 Windows 证书存储,它们确实为私钥添加了保护层,但它们确实将密钥标记为可导出,从而允许提取密钥。 OpenSSL 工具(在 Windows 上)在 Windows 证书存储(作为文件)之外生成密钥,因此您可以轻松访问它,但这并不安全。

    我发现这篇文章:https://www.namecheap.com/support/knowledgebase/article.aspx/9854//how-to-generate-a-csr-code-on-a-windowsbased-server-without-iis-manager,其中提到了 3 种用于生成 CSR 的其他方法/工具,其中第一种(使用 Microsoft 管理控制台中的证书管理单元)实际上允许您标记私钥因为不可导出。

    当然,在您的情况下,获取(例如导出)私钥的能力至关重要,因为您必须在其他地方生成 CSR,因为 Azure Web App 证书存储目前没有允许生成 CSR 的功能。

    【讨论】:

      【解决方案3】:

      例如,在本地机器中使用 ssl 在命令行中执行:

      • 创建 csr: openssl req -new -newkey rsa:2048 -nodes -keyout yourprivate.key -out yourdomainname.csr

      这里你已经生成了 crt 和 bundle 文件:

      • 下一步创建 pfx:openssl pkcs12 -export -out certificate.pfx -inkey yourprivate.key -in nameofyourcertfile.crt -certfile nameofyourtcacertfile.ca-bundle

      在您可以将您的 certificate.pfx 文件上传到 Azure 应用服务并绑定到您的自定义域之后

      您必须为裸域和 www 域购买证书和设置,因为 Azure 目前只为 www 域提供免费的托管证书。

      【讨论】:

        【解决方案4】:

        您可以选择在额外服务中搜索“App Certificate Service”,而不是手动执行此操作,这将为您提供购买 SSL 证书然后将其绑定到您的应用程序的向导。它比手动生成 CSR 更简单、更快捷,而且也少了很多混乱。文档很冗长,并不清楚我们是否应该远程进入服务器并在那里生成 CSR 等,所以我强烈建议通过 App Certificate Service 进行。

        【讨论】:

        • 假设您可以从 MS 购买证书,而不是例如从您自己公司的 PKI 中获取,从便宜的地方获取,或者从免费的地方获取。 :)
        【解决方案5】:

        您可以在 Certreq.exe 或 OpenSSL 工具的帮助下创建 cer 文件。

        更多详情请查看官方文档如何enable HTTPS for an app in Azure App Service

        【讨论】:

        • 我的问题是我必须在 azure 服务器上生成 csr 文件吗?我只有 MS 没有访问权限……所以教程说……但这怎么能工作?
        • 我听说 csr 文件包含生成 csr 的机器的指纹(用于),所以我假设我必须在 azure 服务器上创建 csr。但是对于我的标准订阅,我没有 root 访问权限。我无法在 Azure 服务器上运行 certreq.exe!
        • 您不必在 azure 上创建 csr 文件。事实上,你将无法做到。但是您可以在之后将完成的证书上传到 azure web 应用程序。
        • 但是拇指印呢?
        • 据我所知,证书中没有存储机器详细信息。即使发生这种情况,证书也可以用于网络应用程序。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-23
        • 2014-07-02
        • 2016-06-04
        • 1970-01-01
        相关资源
        最近更新 更多