Openssl pkcs8 默认格式提供 RSA PRIVATE KEY

Log*_*gan 14 rsa openssl

我在我的电脑上运行这个命令(Openssl 版本:1.0.1):

openssl pkcs8 -inform DER -in file.key -passin pass:12345678a -outform PEM -out key.pem
Run Code Online (Sandbox Code Playgroud)

我得到了这个 key.pem:

-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANCFPVXwO+6qQdOs
...
wVauPfh0cGEf1Kc=
-----END PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

但是当我从我的服务器(Openssl 版本:0.9.8e-fips-rhel5)运行相同的命令时,我得到了这个输出:

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDQhT1V8DvuqkHTrMPFUUAXUl0ihDGoiD86SqK8Z3n19yp1VrJf
...
zHY0343VXnpM2opKwG2E1zgfHfbcLMFWrj34dHBhH9Sn
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

里面的 Base64 是不同的,也是标头:

-----BEGIN PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

第一个对我有用,我怎么能在 0.9.8 版本上获得 -----BEGIN PRIVATE KEY----- 输出?

我在 OpenSsl 补丁说明上找到了这个:

将默认私钥格式更改为 PKCS#8。

所以,这可能是主要问题,我希望有人能帮我解决这个问题,我找不到获取私钥的方法,但找不到 BEGIN RSA PRIVATE KEY 的方法。

谢谢

小智 29

openssl pkcs8 -topk8一个私钥从传统的格式转换为PKCS#8格式。

这种格式

-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

私钥被称为“SSLeay 格式”或“传统格式”。

我不确定您的密钥是哪种格式,因此我将使用由genrsa. 当你genrsa在的OpenSSL 0.9.8x,生成的关键是在传统的格式。也就是说,经过

openssl genrsa -out file.key 1024
Run Code Online (Sandbox Code Playgroud)

你会得到一个传统格式的 rsa 密钥

-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQC3TyaSzsJO92/Ahq5rxRI1T0JSC0iF...
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

然后做pkcs8-topk8此键从传统的格式转换为PKCS#8格式。

openssl pkcs8 -topk8 -inform pem -in file.key -outform pem -nocrypt -out file.pem
Run Code Online (Sandbox Code Playgroud)

这是你会得到的:

-----BEGIN PRIVATE KEY-----
MIICdQIBADANBgkqhkiG9w0BA...
-----END PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

以上所有内容都是使用 OpenSSL 0.9.8x 完成的。它告诉您如何从传统格式密钥生成 PKCS#8 格式密钥。另一方面,您始终可以在 OpenSSL 1.0.1 上运行它以使密钥与旧版本兼容:

openssl rsa -in file.pem -text > key.pem
Run Code Online (Sandbox Code Playgroud)