我正在尝试为托管在 Azure 上的网站创建一个 PFX 文件。
我生成了mycsr.csr
以及privatekey.key
并从 Entrust 收到了 3 个文件root.crt
,Intermediate.crt
以及ServerCertificate.crt
。
我尝试使用以下命令创建 PFX 文件
- “C:\Program Files\OpenSSL-Win64\bin\openssl.exe” pkcs12 -export -out myPrivateCert.pfx -inkey PRIVATEKEY.key -in ServerCertificate.crt
这确实会生成一个 PFX 文件,但当我尝试将其上传到 Azure 时,它显示
- 密码不正确或证书无效
我知道我输入的密码正确,所以我觉得我错误地生成了 PFX。
我是 SSL 证书的新手,不太清楚我收到的 3 个 CRT 文件之间的区别。如能得到任何帮助,我将不胜感激。
编辑
我尝试将 3 个 CRT 文件合并为一个chain.pem
文件,其中 ServerCertificate 文件在第一个,然后是中间文件,然后是根文件。
然后我尝试使用以下命令生成 PFX 文件:
- “C:\Program Files\OpenSSL-Win64\bin\openssl.exe” pkcs12 -in chain.pem -inkey PRIVATEKEY.key -export -out myPrivateCert.pfx
再次,此 PFX 文件不会上传到 Azure。
答案1
我按照@Lacek 的步骤操作,但这只是我的问题的一部分。按照他的步骤生成的 PFX 文件仍然未被 Azure 接受。这是完整的解决方案。
将 CRT 文件(ServerCertificate.crt、Intermediate.crt 和 root.crt)合并为单个 chain.pem 文件
然后使用 openssl 将此文件导出为 PFX
openssl.exe pkcs12 -in chain.pem -inkey PRIVATEKEY.key -export -out myPrivateCert.pfx
然后将此 PFX 文件导入 MMC(Microsoft 管理控制台)。导入时务必选中“将此密钥标记为可导出...”
- 导入 PFX 文件后,您需要右键单击服务器证书,然后“导出...”。
- 导出时务必选中“是,导出私钥”。然后在下一页上选择“PFX”选项,然后选中“导出所有扩展属性”。为文件设置密码,然后保存文件。从 MMC 应用程序生成的 PFX 文件将正确上传到 Azure 门户。
我不是 SSL 证书的出口商,所以我不确定所有这些步骤是否都是必要的,我只知道它们对我有用。
我也不清楚 OpenSSL 生成的 PFX 文件和 MMC 生成的 PFX 文件之间的区别,但显然存在区别,而且 Azure 更喜欢后者。
希望这对其他人有帮助。
答案2
您的问题(可能)是 PFX 文件不包含所有证书链,因此如果中间件不受信任,您的证书也不会受到信任。
您需要做的是将所有证书复制到一个文件中,从“叶”到“根”,即服务器证书应该是第一个,然后是中间证书,然后是根证书。为此,证书文件必须采用 PEM 格式(从您帖子中的命令来看,它们似乎是 PEM 格式)。因此,您需要将所有证书连接到一个文件中:
type ServerCertificate.crt Intermediate.crt root.crt >chain.pem
然后将生成的文件转换为 PKCS12:
openssl.exe pkcs12 -in chain.pem -inkey PRIVATEKEY.key -export -out myPrivateCert.pfx
这样,生成的文件应该包含链中的所有证书以及它们之间的关系。
答案3
如果我发帖晚了,我很抱歉......我刚刚才看到它......
问题在于您必须在运行命令的同一台计算机中导入 PFX 证书(“C:\Program Files\OpenSSL-Win64\bin\openssl.exe”pkcs12 -export -out myPrivateCert.pfx -inkey PRIVATEKEY.key -in ServerCertificate.crt)
在该特定计算机上,证书密码将起作用。
您必须确保将私钥标记为可导出(在导入过程中)。这样您就可以从 MMC 控制台再次导出它并分配相同或新的密码。并且此密码可以在任何其他 Windows 计算机上使用。
我希望这可以帮助任何人。
杰拉尔多