我在我的电脑上运行此命令(Openssl 版本:1.0.1):
openssl pkcs8 -inform DER -in file.key -passin pass:12345678a -outform PEM -out key.pem
我得到了这个key.pem:
-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANCFPVXwO+6qQdOs
...
wVauPfh0cGEf1Kc=
-----END PRIVATE KEY-----
但是当我从我的服务器(Openssl 版本:0.9.8e-fips-rhel5)运行相同的命令时,我得到了以下输出:
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDQhT1V8DvuqkHTrMPFUUAXUl0ihDGoiD86SqK8Z3n19yp1VrJf
...
zHY0343VXnpM2opKwG2E1zgfHfbcLMFWrj34dHBhH9Sn
-----END RSA PRIVATE KEY-----
里面的 Base64 和标题都不同:
-----BEGIN PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY-----
第一个对我有用,我如何在 0.9.8 版本上获取 -----BEGIN PRIVATE KEY----- 输出?
我在 OpenSsl 补丁说明中发现了这一点:
将默认私钥格式更改为 PKCS#8。
所以,这可能是主要问题,我希望有人可以帮助我解决这个问题,我找不到获取私钥的方法,但没有找到 BEGIN RSA PRIVATE KEY 的方法。
谢谢
答案1
将openssl pkcs8 -topk8
私钥从传统格式转换为 pkcs#8 格式。
这种格式
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
被称为私钥的“SSLeay格式”或“传统格式”。
我不确定你的密钥是哪种格式,所以我将使用 生成的私钥来演示这个想法genrsa
。在 OpenSSL 0.9.8x 中执行此操作时genrsa
,生成的密钥是传统格式。也就是说,在
openssl genrsa -out file.key 1024
你会得到一个传统格式的 rsa 密钥
-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQC3TyaSzsJO92/Ahq5rxRI1T0JSC0iF...
-----END RSA PRIVATE KEY-----
然后pkcs8
将此-topk8
密钥从传统格式转换为 pkcs#8 格式。
openssl pkcs8 -topk8 -inform pem -in file.key -outform pem -nocrypt -out file.pem
您将获得以下内容:
-----BEGIN PRIVATE KEY-----
MIICdQIBADANBgkqhkiG9w0BA...
-----END PRIVATE KEY-----
以上所有操作均使用 OpenSSL 0.9.8x 完成。它告诉您如何从传统格式密钥生成 PKCS#8 格式密钥。另一方面,您始终可以在 OpenSSL 1.0.1 上运行此操作以使密钥与旧版本兼容:
openssl rsa -in file.pem -text > key.pem