android keystore

来源:互联网 发布:生意专家软件好用吗 编辑:程序博客网 时间:2024/04/28 14:39

1、生成私钥

Keytool 选项描述-genkey产生一个键值对(公钥和私钥)-v允许动作输出-alias<alias_name>键的别名。只有前八位字符有效。-keyalg产生键的加密算法。支持DSA和RSA。-keysize产生键的长度。如果不支持,keytool用默认值1024 bits.通常我们用2048 bits 或更长的key。-dname

专有名称,描述谁创建的密钥。该值被用作自签名证书的颁发者和主题字段。注意你可以不在命令行指定。如果没有指定keytool会提示你(CN, OU, and so on)。

-keypass

键的密码。

主要为了安全起见,如果没提供,keytool会提示你输入。

-validity

键的有效期,单位:天

Note: A value of 10000 or greater is recommended.

-keystore.keystore用于存储私钥的文件。-storepass

私钥存储文件的密码。

主要为了安全起见,如果没提供,keytool会提示你输入。这个密码不会存储在你的shell历史记录中。


keytool -genkey -v -keyalg DSA -keysize 1024 -sigalg SHA1withDSA  -validity 20000  -keystore Mystore.keystore -alias devel   -keypass pwd -storepass pwd


2、读取android keystore 中的信息,

在命令窗口中输入:keytool -list -v -keystore keystoreName - storepass keystorePassword

3、对apk进行签名:

在命令行中输入:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore {keystore文件路径} -storepass {私钥存储文件的秘钥,即keystore的秘钥}  {要签名的apk} {生成keystore时,定义的别名}

该命令在JDK 1.7以上使用

Jarsigner 选项描述-keystore.keystore包含你私钥的存储文件-verbose显示输出动作。-sigalg签名算法,用 SHA1withRSA.-digestalg消息摘要算法,用 SHA1.-storepass存储文件的密码。

主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。

-keypass私钥的密码。

主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。

注意:

1、使用命令对apk进行签名的时候,会产生警告,可忽略。警告如下:
警告:
未提供 -tsa 或 -tsacert, 此 jar 没有时间戳。如果没有时间戳, 则在签名者证书的到期日期 (2039-03-05) 或以后的任何撤销日期之后, 用户可
能无法验证此 jar。

a、解决方案:

jarsigner -verbose -digestalg SHA1 -sigalg MD5withRSA-tsa https://timestamp.geotrust.com/tsa -keystore new.keystore -keypass coo -storepass coo -signedjar signed.apk(签名后apk的名字) sign.apk(要签名的apk) new.keystore

该方法问题:-tsa 的网址在命令行中有时会访问失败。{jarsigner: 无法对 jar 进行签名: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake}


二、在签名过程遇到的jarsigner 错误: java.util.zip.ZipException: invalid entry compressed size (expected 10434 but got 10610 bytes) 异常。

这是因为默认给apk做了debug 签名,所以无法做新的签名
这时就必须点工程右键->Android Tools ->Export Unsigned Application Package.
或者从AndroidManifest.xml的 Exporting上也是一样的
然后再基于这个导出的unsigned apk做签名,导出的时候最好将其目录选在你之前产生keystore的那个目录下,这样操作起来就方便了。

另外,也可以用压缩软件打开apk包,删除保重的META-INF文件。在进行签名也可以。



大家有好的解决方案可交流一下。谢谢!





0 0
原创粉丝点击