OpenSSL 使用 RSA 私钥将 PEM 转换为 PFX

thx*_*ike 8 rsa openssl ppk

我正在尝试使用 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 文件。
干杯!


thx*_*ike 2

经过一番挖掘后,我发现是 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 命令就会按预期工作。