jarsigner签名与密钥库

发布 Android 应用需要对 apk 进行签名,一般是使用 jarsigner 进行签名,也可能会用到 keytool。

关于 keytool 和 jarsigner,使用说明太简单,估计没几个人用得熟练。近几天摸索出了一些经验,写下备忘。

 

生成密钥库(默认生成的是 jks 类型的密钥库):

keytool -v -genkey -keystore cert.keystore -alias cert.keystore -keyalg RSA -validity 200000 

使用 jks 类型的密钥库进行签名:

jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore cert.keystore -sigfile cert -signedjar xxx_new_signed.apk xxx_new.apk cert.keystore

如果签名时报错,试一试逐一去掉 -sigalg MD5withRSA 参数和 -digestalg SHA1 参数。 -sigfile 指定的是文件名是 META-INFO 下产生的 .DS 和 .RSA 文件的文件名。

 

把 .p12 密钥库转换为 jks 类型密钥库:(网上很好资料都不太正确,基本都是说 .p12 不能导入,那是使用 -importcert ,摸索发现使用 -importkeystore 是可以的。.p12 本身就是一个密钥库,只不过是另一个类型)

keytool -importkeystore -srckeystore xxx.p12 -srcalias 1 -srcstoretype pkcs12 -destkeystore xxx.keystore -destalias xxx.keystore

直接使用 .p12 密钥库进行签名:(这个才是重点,折腾了好久才发现原来可以直接使用 .p12 进行签名)

jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore xxx.p12 -storetype pkcs12 -sigfile cert -signedjar xxx_signed_1.apk xxx.apk 1

-sigfile 指定的是文件名是 META-INFO 下产生的 .DS 和 .RSA 文件的文件名。 命令中结尾的 1 是用到的 .p12 密钥库别名,可以使用下面的 keytool -list 命令查看得到。

 

查看 .p12 密钥库详细信息:

keytool -list -keystore xxx.p12 -storetype pkcs12 -v

 

参考资料:(就是从下面的资料里受到启发的,虽然里面说不能导入 p12 不太正确)
http://blog.csdn.net/peterwanghao/article/details/1761728
http://blog.csdn.net/peterwanghao/article/details/1761728

posted @ 2013-04-27 10:34  巍巍清风  阅读(1441)  评论(0)    收藏  举报