我正在尝试使用 OpenSSL 将 PEM 文件和 RSA 私钥转换为 PFX 文件。这是我尝试使用的示例命令:
openssl pkcs12 -export -out cert.pfx -inkey key.pem -in cert.pem
Run Code Online (Sandbox Code Playgroud)
这样做时,我收到以下错误消息:
unable to load private key
9068:error:0906D06C:PEM routines:PEM_read_bio:no start
line:pem_lib.c:696:Expecting: ANY PRIVATE KEY
Run Code Online (Sandbox Code Playgroud)
证书文件如下所示:
-----BEGIN CERTIFICATE-----
....
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
私钥如下所示:
-----BEGIN RSA PRIVATE KEY-----
....
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
我对错误进行了一些挖掘,但我还没有找到解决方案。
编辑
经过一些额外的研究,不同的 openssl 版本似乎是一个问题。
如果我在 2016 年 1 月 14 日运行 0.9.8zh 的 OSX 系统上运行它,这些语句可以正常工作。
但是,如果我在版本为 OpenSSL 1.0.1p 2015 年 7 月 9 日和 OpenSSL 1.1.0g 2017 年 11 月 2 日的 Windows 机器上运行它,则会出现上述错误。
小智 5
我也被困在同样的问题上。正如@thxmike 所说。我的情况也类似。
OpenSSL 命令没有按预期工作。
openssl pkcs12 -export -in c.cer -inkey c.key -out d.pfx
所以我最终在 Windows 上使用 Certutil。因为我们想将其添加到 Azure。
注意:-
1. 确保将 .crt 更改为 .cer。
2. 确保将 .cer 和 .key 文件放入同一文件夹并具有相同的名称 - (c.cer 和 c.key)
然后运行:
certutil -MergePFX c.cer c.pfx
您应该获得合并的 pfx 文件。
干杯!
经过一番挖掘后,我发现是 Powershell 脚本生成了密钥和证书文件。
在Windows上使用Notepad++和OSX上的Tex-Edit Plus识别隐藏字符,我发现文件末尾多了一个[cr]。
使用命令
openssl rsa -in <private key file> -noout -text
openssl x509 -in <cert file> -noout -text
Run Code Online (Sandbox Code Playgroud)
可以很好地检查文件的有效性
由于我的源是 base64 编码的字符串,因此我最终在 Windows 上使用 certutil 命令(即)
certutil -f -decode cert.enc cert.pem
certutil -f -decode key.enc cert.key
Run Code Online (Sandbox Code Playgroud)
在 Windows 上生成文件。一旦文件正确,上面的 OpenSSL 命令就会按预期工作。
| 归档时间: |
|
| 查看次数: |
30047 次 |
| 最近记录: |