签名文件keystore常见操作

来源:互联网 发布:python数组减1 编辑:程序博客网 时间:2024/06/04 19:15

准备资料

密钥库基本信息

密钥库命名:test.keystore
密钥库密码:111111
有效时间:40000
加密算法:RSA
条目一:test1
条目二:test2

test1实体信息:

名字与姓氏:大叔
组织单位名称:山那边
组织名称:山那边
所在的城市或区域名称:玉溪
所在的州或省份名称:云南
该单位的两字母国家代码是:CN

test2实体信息

名字与姓氏:大叔2
组织单位名称:山那边2
组织名称:山那边2
所在的城市或区域名称:玉溪
所在的州或省份名称:云南
该单位的两字母国家代码是:CN

环境

jdk1.8.0_101,windows系统cmd命令行。

创建密钥库

以上是我们将要创建的密钥库的基本信息和生成密钥库的环境,接下来我们将进行密钥库的创建,关于密钥库的创建,我就不一步步来了,直接一串命令搞定。
1. 进入jdk的bin目录:D:\work\java\jdk1.8.0_101\bin>
2. 创建命令为:D:\work\java\jdk1.8.0_101\bin>keytool -genkey -dname “CN=大叔,OU=山那边,O=山那边,L=玉溪,ST=云南,C=CN” -alias test1 -keyalg RSA -validity 40000 -keystore test.keystore
在键入以上命令之后,按回车键,提示输入密钥库口令和条目的密钥口令,输入的口令是不可见的。这两个口令在之后的签名、查看签名信息等的操作是必须要用到的,所以必须要记住这两个口令。当然这两个口令也可以保持一致。
创建密钥库文件

创建密钥库文件
D:\work\java\jdk1.8.0_101\bin>keytool -genkey -dname “CN=大叔,OU=山那边,O=山那边,L=玉溪,ST=云南,C=CN” -alias test1 -keya
lg RSA -validity 40000 -keystore test.keystore
输入密钥库口令:
再次输入新口令:
输入 的密钥口令
(如果和密钥库口令相同, 按回车):
再次输入新口令:
D:\work\java\jdk1.8.0_101\bin>

查看密钥库文件信息

指令:keytool -list -v -keystore 密钥库文件名 -storepass 密钥库密码
keytool -list -v -keystore test.keystore -storepass 111111
查看密钥库文件信息

签名

指令

jarsigner -verbose -keystore test.keystore -signedjar test_signed.apk test.apk test1 -digestalg SHA1 -sigalg MD5withRSA

描述

-verbose 输出签名的详细信息
-keystore demo.keystore 密钥库位置
-signedjar ActiveDemo_signed.apk ActiveDemo.apk demo.keystore 正式签名,三个参数中依次为签名后产生的文件ActiveDemo_signed,要签名的文件ActiveDemo.apk和密钥库条目(别名)demo.keystore
-digestalg SHA1 -sigalg MD5withRSA 这是针对jdk1.7环境下的签名字段,如果不加,会无法在低版本的Android系统上安装
签名apk
签名apk成功

查看签名apk的签名信息

keytool -printcert -file RSA文件路径
D:\work\java\jdk1.8.0_101\bin>keytool -printcert -file test_signed/META-INF/TEST1.RSA
-printcert:打印证书内容
-file:指定文件目录
下面是RSA文件所在目录
RSA文件的位置
查看apk签名信息

添加条目

添加条目test2

keytool -genkey -dname “CN=大叔2,OU=山那边2,O=山那边2,L=玉溪,ST=云南,C=CN” -v -alias test2 -keyalg RSA -validity 3650 -keystore test.keystore
条目test2的得实体信息为”CN=大叔2,OU=山那边2,O=山那边2,L=玉溪,ST=云南,C=CN”,条目实体与test1是区分开的,但是有效期和签名算法就是一样的了,都是针对密钥库的。所以当执行了这条指令,test.keystore的有效工期将有40000天变为3650天。
添加条目test2
这里的密钥口令是这个条目(别名)对应的口令,这跟我之前的test1条目的口令是不一样的,test1口令为222222,新加入的test2的口令为333333,在签名的时候,根据所选的条目,输入对应的口令,口令不对将无法签名。

查看密钥库的信息。

keytool -list -v -keystore test.keystore -storepass 111111
添加条目test2之后的密钥库文件信息

使用条目test2进行签名

jarsigner -verbose -keystore test.keystore -signedjar test_signed2.apk test.apk test2 -digestalg SHA1 -sigalg MD5withRSA
使用条目test2签名apk
使用条目test2签名apk签名成功

查看test2签名的apk的签名信息

keytool -printcert -file test_signed2/META-INF/TEST2.RSA
条目test2签名apk的RSA文件所在目录
条目test2签名apk的签名信息
安装使用test2签名的apk,由于我此前在手机上已经安装了使用test1签名的apk,所以就会安装失败,只有先卸载原来的apk,才可以进行安装。

删除条目

删除条目test2

keytool的命令行参数-delete可以删除密钥库中的条目,如: keytool -delete -alias RapaServer -keystore d2aApplet.keystore,这条命令将d2aApplet.keystore中的RapaServer这一条证书删除了。
keytool -delete -alias test2 -keystore test.keystore
删除条目test2

查看删除条目test2之后的密钥库文件信息

keytool -list -v -keystore test.keystore -storepass 111111
在删除test2之后,再次查看密钥库信息,就之后test1一个条目了。
查看删除条目test2之后的密钥库文件信息

修改口令

修改密钥库指令和修改密钥指令

密钥库原口令为111111,现在我们改为444444;test1原有密钥口令为222222,我们改为555555,。然后在使用新的密钥库口令和密钥口令签名apk,签名成功。
keytool -storepasswd -keystore test.keystore
执行后会提示输入证书的当前口令,和新口令以及重复新口令的确认。这一步将密钥库口令改为444444。
修改密钥库口令
keytool -keypasswd -keystore test.keystore -alias test1
执行后会提示输入keystore口令,alias原口令,然后提示输入新的alias口令,同样,按规矩来,改为555555,修改成功。
修改条目test1密钥口令

使用修改了口令的密钥库签名

输入新的密钥库口令和密钥口令
使用修改了口令的密钥库签名
使用修改了口令的密钥库签名成功

修改签名文件信息

由于有些功能涉及正确的签名,才可以进行正常功能的使用,比如,百度定位、微信分享。为了便于在IDE中进行调试,我们将正式环境的密钥库做一下处理就可以用于在IDE的debug环境了。
修改为如下:

Keystore name: “debug.keystore”Keystore password: “android”Key alias: “androiddebugkey”Key password: “android”CN: “CN=Android Debug,O=Android,C=US”

具体操作:

  1. 首先当然是先复制一份正式证书出来作为要修改为的临时调试证书。
  2. 修改keystore密码的命令(keytool为JDK带的命令行工具):
    keytool -storepasswd -keystore my.keystore
    其中,my.keystore是复制出来的证书文件,执行后会提示输入证书的当前密码,和新密码以及重复新密码确认。这一步需要将密码改为android。
  3. 修改keystore的alias:
    keytool -changealias -keystore my.keystore -alias my_name -destalias androiddebugkey
    这一步中,my_name是证书中当前的alias,-destalias指定的是要修改为的alias,这里按规矩来,改为androiddebugkey。这个命令会先后提示输入keystore的密码和当前alias的密码。
  4. 修改alias的密码:
    keytool -keypasswd -keystore my.keystore -alias androiddebugkey
    这一步执行后会提示输入keystore密码,alias密码,然后提示输入新的alias密码,同样,按规矩来,改为android
原创粉丝点击