1. 程式人生 > >keystore檔案轉換格式為pk8+x509.pem

keystore檔案轉換格式為pk8+x509.pem

原文地址:
http://blog.csdn.net/ilittleone/article/details/17914995

android 一般除了使用jarsigner簽名 還有使用signapk 後者位於android原始碼 前者位於jdk中。兩者使用的檔案格式不同前者使用JKS 後者使用公鑰+私鑰 是分開的

第一步 先v把keystore檔案轉換為pkcs12格式

keytool   -importkeystore -srckeystore debug.keystore   -destkeystore tmp.p12 -srcstoretype JKS         -deststoretype PKCS12

第二步 將PKCS12 dump成pem 這樣就可以按照文字形式查看了

openssl

pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem


  接下來開啟檔案intermediate.rsa.pem 看到 PRIVATE KEY 還有CERT PS:private 那邊可能有RSA KEY 這個不用管
Bag Attributes
    friendlyName: androiddebugkey
    localKeyID: 54 69 6D 65 20 31 33 38 38 39 37 38 34 32 36 38 36 39 
Key Attributes: <No Attributes>

-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
Bag Attributes
    friendlyName: androiddebugkey
    localKeyID: 54 69 6D 65 20 31 33 38 38 39 37 38 34 32 36 38 36 39 
subject=/C=US/O=Android/CN=Android Debug
issuer=/C=US/O=Android/CN=Android Debug
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
複製“BEGIN CERTIFICATE”  “END CERTIFICATE” 之間的資訊到(新建個檔案) cert.x509.pem

[
 pem裡面內容(下的一樣):
-----BEGIN CERTIFICATE-----
。。。。
-----END CERTIFICATE-----
]
複製 “BEGIN RSA PRIVATE KEY”   “END RSA PRIVATE KEY”之間的資訊 到(新建個檔案) private.rsa.pem

第三 生成pk8格式的私鑰

openssl

pkcs8 -topk8 -outform DER -in     private.rsa.pem -inform PEM -out private.pk8 -nocrypt


 完畢 收集檔案 cert.x509.pemprivate.pk8 其餘的中間檔案刪除即可
PS:

-nocrypt 這個引數設定key加密 如果設定了這個引數 下面簽名 只要證書+key 不需要密碼了 如果加密 應該openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 接下來輸入密碼

用法 java -jar signapk.jar cert.x509.pem private.pk8 unsigned.apk signed.apk

bug解決:

(1)MAC verified OK Error outputting keys and certificates

http://stackoverflow.com/questions/2640691/how-to-export-private-key-from-a-keystore-of-self-signed-certificate/2641032

裡面有一句話:

For everyone getting the "Error outputting keys and certificates" error: try using the same password for source and destination. –  James Watkins