2016-11-26 57 views
0

我正在學習openssl的RSA密鑰生成和操作。首先,我所產生的密鑰對編碼於PEM的格式,但不加密:Openssl RSA密鑰PEM和DER轉換 - 不匹配

openssl genpkey -algorithm RSA -out key.pem -pkeyopt rsa_keygen_bits:2048 

然後我轉換爲DER格式:

openssl rsa -inform PEM -outform DER -in key.pem -out key1.cer 

然後我將它轉換回PEM編碼:

openssl rsa -inform DER -outform PEM -in key1.cer -out key2.pem 

現在,如果我比較兩者,它們的內容不同(BASE64編碼的文本)。文件的大小也不同...

diff key.pem key2.pem 

這是爲什麼?我在這裏做錯了什麼?

所有的鑰匙都附在這裏。 https://www.dropbox.com/sh/ec1sm3y63sahwks/AAB6At3x_j5LRyf63gJDJn39a?dl=0

感謝, 藩

回答

0

看那PEM文件,你會看到一個開始-----BEGIN PRIVATE KEY-----和其他始於-----BEGIN RSA PRIVATE KEY-----。 PEM塊的BEGIN和END行中的字指定塊中數據的格式,並且這些指定了兩個約10(取決於您的計算方式)不同的數據格式由OpenSSL支持RSA密鑰。

第一個是PKCS8republished as RFC 5208中的部分5的未加密變種PKCS8可以處理的私有密鑰對許多不同的算法,包括RSA DSA DH和ECDSA,具有或不具有密鑰的基於密碼的加密(PBE) 。 openssl genpkey旨在處理多種算法,並使用PKCS8格式來執行此操作。

第二個是RSA-only PKCS1的私鑰語法republished as RFC3447 et pred在A.1節。這種格式由較舊的openssl rsaopenssl genrsa函數編寫,因爲它們只處理RSA,並被稱爲「傳統」或「傳統」格式,以區別於PKCS8。 PKCS1沒有定義任何加密格式,但OpenSSL支持通用的PEM加密方案,如果您要求,可以應用於此格式。但是,OpenSSL'傳統'PEM加密不如PKCS8中使用的那麼好,所以如果您需要安全性,您通常應該使用PKCS8,或者可能使用PKCS12而不是使用證書的私鑰

可以轉換爲PKCS8 DER和背部PEM使用pkey這就像genpkey處理多種算法,並使用PKCS8到:

openssl pkey -in key.pem [-inform PEM] -out key.der -outform DER 
openssl pkey -in key.der -inform DER -out xxx.pem [-outform PEM] 
# now xxx.pem is the same as key.pem 

由於PEM文件(不同於DER)可以通過鍵入確認BEGIN線,您可以PKCS1 PEM轉換回直接PKCS8:

openssl pkey -in key2.pem -out yyy.pem 
# now yyy.pem is the same as key.pem 

程序使用OpenSSL庫,包括但不限於:openssl命令行,可以自動讀取任何一種格式的私鑰PEM文件,也可以在提供正確密碼的情況下自動讀取兩種加密格式。

+0

謝謝先生!非常明確的答案。然而,我明確表示,我是新的低信譽,所以我upvote不計數...對不起。但這個答案應該吸引一些upvotes! –

相關問題