http://blog.csdn.net/ilittleone/article/details/17914995
1, 生成key
命令: keytool -genkey -v -keystore app.keystore -alias gundam_wing -keyalg RSA -validity 20000
控制臺輸出:
輸入密鑰庫口令:
再次輸入新口令:
您的名字與姓氏是什么?
[Unknown]: TechStone
您的組織單位名稱是什么?
[Unknown]: Gundam
您的組織名稱是什么?
[Unknown]: Gundam
您所在的城市或區(qū)域名稱是什么?
[Unknown]: Shanghai
您所在的省/市/自治區(qū)名稱是什么?
[Unknown]: Shanghai
該單位的雙字母國家/地區(qū)代碼是什么?
[Unknown]: zh
CN=TechStone, OU=Gundam, O=Gundam, L=Shanghai, ST=Shanghai, C=zh是否正確?
[否]: Y
正在為以下對象生成 2,048 位RSA密鑰對和自簽名證書 (SHA256withRSA) (有效期為 20,000 天):
CN=TechStone, OU=Gundam, O=Gundam, L=Shanghai, ST=Shanghai, C=zh
輸入 <gundam_wing> 的密鑰口令
(如果和密鑰庫口令相同, 按回車):
[正在存儲app.keystore]
這個命令會生成帶組織/個人信息的key盆繁,并存放在app.keystore文件中
2, 轉(zhuǎn)換key的格式
命令:keytool -importkeystore -srckeystore app.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12
控制臺會提示輸出tmp.p12的密碼以及app.keystore的密碼夹界,輸入正確之后將會生成tmp.p12文件。
3, 將PKCS12格式的key dump為可直接閱讀的文本
命令:openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem
dump過程中也會提示輸入密碼称杨,正確輸入之后可閱讀的token會存儲在tmp.rsa.pem中
4, 提取
用文本編輯器打開tmp.rsa.pem挽鞠,將從
-----BEGIN PRIVATE KEY-----
到
-----END PRIVATE KEY-----
這一段(包含這兩個tag)的文本復(fù)制出來杆逗,新建為文件my_private.rsa.pem
將從
-----BEGIN CERTIFICATE-----
到
-----END CERTIFICATE-----
這一段(包含這兩個tag)的文本復(fù)制出來午乓,新建為文件my.x509.pem (簽名時用到的公鑰)
5, 轉(zhuǎn)換,生成pk8格式的私鑰
openssl pkcs8 -topk8 -outform DER -in my_private.rsa.pem -inform PEM -out my_private.pk8 -nocrypt
這個生成的my_private.pk8就是簽名時用到的私鑰
6, 對apk簽名
java -jar signapk.jar my.x509.pem my_private.pk8 my.apk my_signed.apk