从PFX(PKCS#12)文件创建RSA私钥

19

我正在尝试从一个pkcs #12文件中获取私钥RSA。

我已经尝试运行标准的

openssl pkcs12 -nocerts -out priv.pem -in domain.com.pfx

然而,这会导致一个类似以下的密钥文件:

Bag Attributes
Microsoft Local Key set: <No Values>
localKeyID: 01 00 00 00 
friendlyName: xxxxxxxx
Microsoft CSP Name: Microsoft RSA SChannel Cryptographic Provider
Key Attributes
X509v3 Key Usage: 10
-----BEGIN ENCRYPTED PRIVATE KEY-----

我需要将它放入的服务器无法处理密钥文件,当我查看示例数据时,我看到了下面这样的一个文件

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,2CF27DD60B8BB3FF
当然,这个密钥在两个文件中都存在。 但是似乎服务器只接受 RSA 私钥文件,而我得到的输出似乎是 X509v3 文件,有人知道如何将其转换为 RSA 私钥文件吗?

1
尝试在“-nocerts”后添加“*-nodes*”,以创建未加密的私钥。 - guido
谢谢。我也尝试过这个方法,但是我无法从输出的pem文件中删除密码,这仍然会让我得到X509v3文件。 - Dorana
@Dorana,我想创建一个与您类似的证书,但是我的 pem 文件不包含第一个代码部分,其中包括 Microsoft 库引用和 x509v3 等。您使用了什么工具? - Waqas Idrees
3个回答

34

嗯 - 使用文本编辑器删除有问题的行可能是最简单的方式。否则,以下内容将清理掉袋子属性:

openssl pkcs12 -in x.pfx  -nocerts -nodes -passin pass:123456 | openssl rsa -out privkey.pem

还可以用于获取der/net

openssl pkcs12 -in x-fred.p12  -nocerts -nodes -passin pass: | openssl rsa -outform DER -out privkey.der

这实际上可能是您想要的格式。不过,许多工具不接受没有密码保护的私钥(如果字符数少于4或6个,则许多工具将悄无声息地失败)。因此,在这些情况下,请将结尾更改为:

.... | openssl rsa -passout pass:123456 -out privkey.pem
.... | openssl rsa -passout pass:123456 -out privkey.der -outform der

1
在Windows 7 64位系统上,您可以直接使用命令行。但是在Mac和Linux上,您需要执行以下步骤: 1、创建.pem文件:
openssl pkcs12 -in xxx.pfx -out xxx.pem 2、创建RSA私钥:
openssl pkcs12 -in xxx.pfx -passin pass:yourpassword | openssl rsa -des3 -passout pass:yourpassowrd -out xxx.key 此步骤将创建包含以下内容的密钥文件: -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,2CF27DD60B8BB3FF" 3、在文本编辑器中打开.pem和.key文件,并用.key文件中的RSA密钥替换.pem文件中的原始密钥"-----BEGIN ENCRYPTED PRIVATE KEY-----"。

1
这对我有用:

这适用于我:

openssl pkcs12 -in "$1" \
    -nocerts -nomacver \
    -passin file:<(cat "$pw") \
    -passout file:<(cat "$pw") |
sed -n '/^-----BEGIN ENCRYPTED PRIVATE KEY-----/,/^-----END ENCRYPTED PRIVATE KEY-----/p'

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