如何为 Azure Web 应用程序创建 CSR 文件
How to create a csr file for azure web app
我需要创建一个 csr 文件以将其提供给某人。
csr 文件用于 Azure Web 应用程序的 SSL 证书。
当我google时,我发现关于哪里生成csr文件的信息不一致。
一些消息来源说:我必须在 Web 应用 运行ning 的服务器上创建 csr 文件。
在我的例子中,azure 上的服务器是未知的。我不能 运行 任何东西...
或者是否可以在我的本地电脑上创建包含所有公司数据的 CSR + 使用自定义域填写的主题?
您可以借助 Certreq.exe 或 OpenSSL 工具创建 cer 文件。
更多详情,请查看官方文档如何enable HTTPS for an app in Azure App Service。
无需手动执行,一个选项是搜索 "App Certificate Service" 的额外服务,这将为您提供购买 SSL 证书然后将其绑定到您的应用程序的向导。与手动生成 CSR 相比,它更简单、更快捷,而且也更容易混淆。文档很冗长,并不清楚我们是否应该远程进入服务器并在那里生成 CSR 等,所以我强烈建议通过 App Certificate Service 来完成。
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(点击高级工具)打开文件并复制内容。
其他人对这些事实提供了宝贵的见解:
- 您可以(如果是 Azure Web App,基本上必须)在与目标服务器(将使用证书的那个)不同的机器上生成 CSR。
- 可用于生成 CSR 的工具(例如 openssl、DigiCert 实用程序)。
- 另一种获取 Azure Web App 证书的方法(Azure App Certificate Service)。
也许我遗漏了什么,但我没有看到答案:
- 您为什么要(甚至应该)在目标机器上生成 CSR?
- 为什么你实际上不需要?
我回答这两个问题的方法首先是这样一个事实,即生成 CSR 实际上是一个过程,它会产生两个工件,其中明显的部分 - 证书请求 - 可能是不太重要的部分事情。更重要的是,实际上也必须排在第一位的是正在生成的 RSA 密钥对,其中 public 部分在 CSR 请求中使用,私有密钥是整个过程的关键部分使用证书的目标。
虽然密钥对通常是使用基于硬件的熵数据生成的,因此特定于您使用的机器,但结果(密钥对)可以在任何地方使用,因为密钥值仅在数学上绑定对彼此。 CSR 内容基于 public 密钥和所请求证书的主题,所以同样,里面没有任何内容,不能在其他地方使用。这解释了为什么在不同的 machine/service 上实际生成 CSR(和密钥)没有技术限制,而不是实际使用它的那个,所以问题编号 2 得到解决。
问题1的答案来自私钥的关键特征,私钥是在这个过程中生成的。这个关键特征是它应该保持私有。理想的情况是只有证书身份的唯一用户能够使用它。 "user" 将是目标服务(Web 服务器)。当您在其他地方生成密钥时,您有责任在该环境中保护它并传输到目标。这通常是不必要的风险。建议的解决方案通常是在目标 certificate/key 存储中生成密钥,并使用私钥保护,防止从存储中提取(导出)私钥。即使是目标服务(Web 服务器)实际上也无法 extract/read 它(但可以使用它)。由于密钥对是在 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 个 ways/tools 用于生成 CSR,其中第一个(使用 Microsoft 管理控制台中的证书管理单元)实际上允许您将私钥标记为不可导出。
当然,在您的情况下,获取(例如导出)私钥的能力至关重要,因为您必须在其他地方生成 CSR,因为 Azure Web App 证书商店目前没有允许生成的功能企业社会责任
例如,在本地机器上使用 ssl 在命令行中执行此操作:
- 创建客户代表:
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 域提供免费的托管证书。
我需要创建一个 csr 文件以将其提供给某人。
csr 文件用于 Azure Web 应用程序的 SSL 证书。
当我google时,我发现关于哪里生成csr文件的信息不一致。
一些消息来源说:我必须在 Web 应用 运行ning 的服务器上创建 csr 文件。
在我的例子中,azure 上的服务器是未知的。我不能 运行 任何东西...
或者是否可以在我的本地电脑上创建包含所有公司数据的 CSR + 使用自定义域填写的主题?
您可以借助 Certreq.exe 或 OpenSSL 工具创建 cer 文件。
更多详情,请查看官方文档如何enable HTTPS for an app in Azure App Service。
无需手动执行,一个选项是搜索 "App Certificate Service" 的额外服务,这将为您提供购买 SSL 证书然后将其绑定到您的应用程序的向导。与手动生成 CSR 相比,它更简单、更快捷,而且也更容易混淆。文档很冗长,并不清楚我们是否应该远程进入服务器并在那里生成 CSR 等,所以我强烈建议通过 App Certificate Service 来完成。
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(点击高级工具)打开文件并复制内容。
其他人对这些事实提供了宝贵的见解:
- 您可以(如果是 Azure Web App,基本上必须)在与目标服务器(将使用证书的那个)不同的机器上生成 CSR。
- 可用于生成 CSR 的工具(例如 openssl、DigiCert 实用程序)。
- 另一种获取 Azure Web App 证书的方法(Azure App Certificate Service)。
也许我遗漏了什么,但我没有看到答案:
- 您为什么要(甚至应该)在目标机器上生成 CSR?
- 为什么你实际上不需要?
我回答这两个问题的方法首先是这样一个事实,即生成 CSR 实际上是一个过程,它会产生两个工件,其中明显的部分 - 证书请求 - 可能是不太重要的部分事情。更重要的是,实际上也必须排在第一位的是正在生成的 RSA 密钥对,其中 public 部分在 CSR 请求中使用,私有密钥是整个过程的关键部分使用证书的目标。
虽然密钥对通常是使用基于硬件的熵数据生成的,因此特定于您使用的机器,但结果(密钥对)可以在任何地方使用,因为密钥值仅在数学上绑定对彼此。 CSR 内容基于 public 密钥和所请求证书的主题,所以同样,里面没有任何内容,不能在其他地方使用。这解释了为什么在不同的 machine/service 上实际生成 CSR(和密钥)没有技术限制,而不是实际使用它的那个,所以问题编号 2 得到解决。
问题1的答案来自私钥的关键特征,私钥是在这个过程中生成的。这个关键特征是它应该保持私有。理想的情况是只有证书身份的唯一用户能够使用它。 "user" 将是目标服务(Web 服务器)。当您在其他地方生成密钥时,您有责任在该环境中保护它并传输到目标。这通常是不必要的风险。建议的解决方案通常是在目标 certificate/key 存储中生成密钥,并使用私钥保护,防止从存储中提取(导出)私钥。即使是目标服务(Web 服务器)实际上也无法 extract/read 它(但可以使用它)。由于密钥对是在 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 个 ways/tools 用于生成 CSR,其中第一个(使用 Microsoft 管理控制台中的证书管理单元)实际上允许您将私钥标记为不可导出。
当然,在您的情况下,获取(例如导出)私钥的能力至关重要,因为您必须在其他地方生成 CSR,因为 Azure Web App 证书商店目前没有允许生成的功能企业社会责任
例如,在本地机器上使用 ssl 在命令行中执行此操作:
- 创建客户代表: 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 域提供免费的托管证书。