2014-02-27 34 views
1

我收到了一些舊的系統下面時,我問私鑰: 模量,公共EXP,EXP PRIVATE,PRIME_P,PRIME_Q,PARAM_P,PARAM_Q,Q_MOD_INV創建PEM,PFX,...從私有模,

所有這些數據都是十六進制的,我如何將它轉換爲openssl PEM文件或PFX?

謝謝,最好的問候!

回答

3

生成與OpenSSL的RSA密鑰:

openssl genrsa -out rsa.pem 2048 

從PEM格式轉換RSA密鑰爲DER格式:

openssl rsa -inform PEM -in rsa.pem -outform DER -out rsa.der 

打開文件rsa.der在ASN.1 Editor

File rsa.der opened in ASN.1 Editor

定義了RSA私鑰的ASN.1結構在PKCS#1(RFC 3447):

RSAPrivateKey ::= SEQUENCE { 
     version   Version, 
     modulus   INTEGER, -- n 
     publicExponent INTEGER, -- e 
     privateExponent INTEGER, -- d 
     prime1   INTEGER, -- p 
     prime2   INTEGER, -- q 
     exponent1   INTEGER, -- d mod (p-1) 
     exponent2   INTEGER, -- d mod (q-1) 
     coefficient  INTEGER, -- (inverse of q) mod p 
     otherPrimeInfos OtherPrimeInfos OPTIONAL 
    } 

編輯在ASN.1編輯器所需的字段(右鍵單擊該項,然後選擇「以十六進制編輯模式」),並粘貼以下這個映射您的數據:

MODULUS = modulus 
    PUBLIC EXP = publicExponent 
    PRIVATE EXP = privateExponent 
    PRIME_P = prime1 
    PRIME_Q = prime2 
    PARAM_P = exponent1 
    PARAM_Q = exponent2 
    Q_MOD_INV = coefficient 

根據意見編輯:私鑰的個別部分是大整數。當該值的最左邊位爲1(或最左邊的字節等於或大於0x80)時,則需要將0x00字節預填到該值以指示它是正數。

最後保存修改後的文件,並將其從DER格式與OpenSSL的轉換爲PEM格式:

openssl rsa -inform DER -in rsa.der -outform PEM -out rsa.pem 
+0

當我打開生成的文件DER模數爲257的長度和私人EXP也是257 ...我有256個字節的數據,現在當我編輯並轉換爲pem並試圖查看我獲得的證書的詳細信息時: 無法加載證書 3068241860:error:0906D06C:PEM例程:PEM_read_bio:no start line:pem_lib.c:696:預計:TRUSTED CERTIFICATE – Lonko

+1

私鑰的個別部分是大整數。當值的最左邊位爲1(或最左邊的字節大於0x80)時,通常會預先寫入0x00字節以指示該值爲正數。這可能是您在一個密鑰中有257個字節,另一個密鑰中有256個字節的原因。您可以在您的私鑰中將0x00添加到符合此條件的值。 – jariq

+0

證書解析錯誤表明您的證書文件可能沒有存儲在正確的PEM編碼中。您可以嘗試使用「openssl x509 -inform DER -in file.cer -text」命令將其解析爲DER編碼證書。如果這不能在文本編輯器中打開證書文件並在註釋中描述其內容(即,它是二進制文件,十六進制編碼 - 僅包含數字,base64編碼 - 包含數字和可打印字符等)。 – jariq