常用的android的簽名工具有兩個即jarsigner 和apksigner。這兩種使用的key格式不一樣,keystore格式轉pk8+x509.pem
1. 將keystore文件轉換為pkcs12格式
keytool -importkeystore -srckeystore my.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12
2. 將PKCS12 dump成pem
openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem
tmp.rsa.pem 是文本格式可以直接查看
打開文本:
Bag Attributes
friendlyName: dtcamera
localKeyID: 54 69 6D 65 20 31 34 35 38 38 31 37 33 31 30 37 30 36
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
Bag Attributes
friendlyName: dtcamera
localKeyID: 54 69 6D 65 20 31 34 35 38 38 31 37 33 31 30 37 30 36
subject=/CN=DTC
issuer=/CN=DTC
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
打開文本可以看到私鑰(PRIVATE KEY )和證書( CERTIFICATE);
復制“BEGIN CERTIFICATE” “END CERTIFICATE” 到(新建個文件) cert.x509.pem
復制 “BEGIN RSA PRIVATE KEY” “END RSA PRIVATE KEY” 到(同上) private.rsa.pem
cert.x509.pem 文件即是我們最后需要的證書文件
3. 生成pk8格式的私鑰
openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 -nocrypt
cert.x509.pem private.pk8 即是我們最后需要的文件棍辕。
*備注:
-nocrypt 這個參數(shù)設定key加密 如果設置了這個參數(shù) 下面簽名 只要證書+key 不需要密碼了 如果加密 應該
openssl pkcs8 -topk8 -outform
DER -in private.rsa.pem -inform PEM -out private.pk8 接下來輸入密碼*
4. 用法
java -jar signapk.jar cert.x509.pem private.pk8 unsigned.apk signed.apk
jarsigner 的用法
jarsigner -verbose -keystore android.keystore -signedjar android_signed.apk android.apk android.keystore
使用這種方式會報錯:找不到 的證書鏈吹零。×× 必須引用包含專用密鑰和相應的公共密鑰證書鏈的有效密鑰庫密鑰條目求摇。
jarsigner -verbose -keystore DT.jks -signedjar signed.apk unsigned.apk "別名"
具體可參考 參考鏈接1
感謝橘小兔-一米陽光的文章射沟,參考鏈接2,幫我解決了這個問題与境,親測可行验夯。