題 Openssl pkcs8默認格式提供RSA PRIVATE KEY


我在我的電腦上運行此命令(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私鑰。

謝謝


7
2018-06-11 00:16


起源


它可能會幫助你 openssl.org/docs/apps/pkcs8.html。


答案:


openssl pkcs8 -topk8 將私鑰從傳統格式轉換為pkcs#8格式。

這種格式

-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----

私鑰被稱為“SSLeay格式”或“傳統格式”。

我不確定你的密鑰是哪種格式,所以我將使用生成的私鑰來演示這個想法 genrsa。 當你這樣做 genrsa 在OpenSSL 0.9.8x中,生成的密鑰採用傳統格式。也就是說,之後

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

21
2018-06-11 10:51



謝謝,它對我有用,我添加了第二個過程,現在它運行了 - Logan
在最後一項 -text 不需要;剛讀完 openssl rsa 並且寫出按要求生成“遺留”(PKCS#1)格式。 -text  增加 在某些情況下可能有用的人類可讀評論,但它們不在以前由...生成的輸出中 pkcs8 (來自8)問題請求。 - dave_thompson_085
為了完整, -----BEGIN RSA PRIVATE KEY----- 是PKCS#1編碼,其中數據不包括密鑰類型。 PKCS#8可以編碼任何類型的密鑰,但PKCS#1不包括密鑰類型,因此文本標題指示密鑰類型。 - Lawrence Dol