如何为Azure Web应用程序创建CSR文件

32
我需要创建一个csr文件并将其提供给他人。
这个csr文件是用于Azure Web应用程序的SSL证书。
当我搜索时,我发现关于在哪里生成csr文件的信息不一致。
一些来源说:我必须在运行web应用程序的服务器上创建csr文件。
在我的情况下,Azure上的服务器是未知的。我不能在那里运行任何东西...
或者,在我的本地PC上创建csr文件,并填写所有公司数据和自定义域名作为主题,是否可以?
5个回答

13

如果控制台中已经安装了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(单击高级工具)打开文件并复制内容。


1
你需要小心地存储密钥文件(yoursite_com.key),因为并非所有文件夹都被持久化,所以你可能会丢失该文件。另一方面,你的密钥文件可能会作为应用服务的一部分被提供。 - Hilarion

10

您可以使用 Certreq.exe 或 OpenSSL 工具创建 cer 文件。

如需更详细信息,请查看官方文档,了解如何在 Azure 应用服务中 启用应用的 HTTPS


3
我的问题是是否必须在Azure服务器上生成CSR文件?这个服务器我没有访问权限,只有Microsoft可以访问。教程上说需要在服务器上生成,但这样怎么可能呢? - HelloWorld
2
我听说csr文件包含了生成csr的机器的指纹(for),所以我认为我必须在Azure服务器上创建csr。但是,由于我的标准订阅没有根访问权限,我无法在Azure服务器上运行certreq.exe! - HelloWorld
1
您无需在 Azure 上创建 csr 文件。实际上,您也无法创建。但是您可以在完成证书后将其上传到 Azure Web 应用程序中。 - Sascha Dittmann
但是指纹呢? - HelloWorld
2
据我所知,证书中不存储任何机器细节。即使发生这种情况,证书也可以用于Web应用程序。 - Sascha Dittmann
显示剩余2条评论

9

其他人已经提供了有关这些事实的宝贵见解:

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

也许我错过了什么,但我没有看到以下问题的答案:

  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,提到了另外三种生成CSR的方式/工具。其中第一种方法(使用Microsoft Management Console中的Certificates插件)实际上允许您标记私钥为不可导出。
当然,在您的情况下,获取(例如导出)私钥的能力非常关键,因为您必须在别处生成CSR,因为Azure Web App证书存储目前没有允许生成CSR的功能。

5

不必手动操作,您可以通过搜索“应用程序证书服务”来购买SSL证书并将其绑定到您的应用程序。这比手动生成CSR要简单得多,也更快捷,而且更少出现混淆。文档过于冗长,也没有明确说明我们是否应该远程连接到服务器并在那里生成CSR等,因此我强烈建议通过应用程序证书服务进行操作。


1
这是假设您愿意从微软购买证书,而不是从您自己公司的PKI、价格更便宜或免费的地方获得证书。 :) - Hilarion

2
例如,在本地机器中使用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域提供免费的托管证书。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接