前言
在公司需求开发中,订制方希望修改数字证书中的字段,体现某一方的参与;原先公司都是统一用一个签名文件对打包的APK进行签名,在这种需求背景下,就需要对统一的签名文件中的签名进行修改
本文介绍使用keytool完成相关需求
一、keytool
keytool 是一个Java 数据证书的管理工具 ,keytool 将密钥(key)和证书(certificates)存在一个称为keystore的文件中 在keystore里,包含两种数据:
- 密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)
- 可信任的证书实体(trusted certificate entries)——只包含公钥
正常情况下,在Java安装过程中自带keytool,配置JDK环境变量后,即可在cmd中直接使用keytool.exe命令。
打开cmd,输入keytool,出现以下界面,说明配置正常
二、修改步骤
1.keytool查看签名信息
在修改签名文件里面的字段值之前,我们需先看到签名文件里的信息,我们使用如下命令进行查看
keytool -v -list -keystore [你的jks文件路径]
查看结果如下:
2.keytool修改签名信息
使用如下命令对想要修改的字段值进行修改,注意这里的修改会直接覆盖进所有者和发布者的内容中,并不是只单单修改发布者和所有者中的一个字段值
keytool -selfcert -alias myalias -keypass aliaspassword -keystore my.jks -storepass jkspassword -dname "CN=FirstAndLastName1, OU=OrganizationalUnit1, O=Organization1, L=CityOrLocality1, ST=StateOrProvince1, C=CountryCode1, EMAILADDRESS=email1@gmail.com"
修改完成后再用查看命令查看即可
三、相关keytool命令总结
查看jks签名库里的签名信息:
keytool -v -list -keystore keystore.jks
更改别名:
keytool -changealias -keystore my.jks -alias myalias -destalias otheralias
删除别名:
keytool -delete -alias myalias -keystore my.jks -storepass jkspassword
查看.apk包里的签名详细:
jarsigner -verify -verbose -certs app-release.apk
通过命令生成密钥库和别名
keytool -genkey -alias myalias -keyalg RSA -keystore my.jks -keysize 2048 -validity 9125 -dname "CN=FirstAndLastName, OU=OrganizationalUnit, O=Organization, L=CityOrLocality, ST=StateOrProvince, C=CountryCode, EMAILADDRESS=email@gmail.com"
----注:-keyalg:加密算法 -keysize:加密位数 -validity:有效期(天) -dname:证书详细信息
导出证书:
keytool -export -alias myalias -keystore my.jks -file myalias.crt -storepass jkspassword
打印证书信息:
keytool -printcert -file myalias.crt
将证书导入到密钥库并生成别名
keytool -import -alias myotheralias -file myalias.crt -keystore my1.jks -storepass jkspassword
修改别名里的信息,注MD5的值也会同时被修改
keytool -selfcert -alias myalias -keypass aliaspassword -keystore my.jks -storepass jkspassword -dname "CN=FirstAndLastName1, OU=OrganizationalUnit1, O=Organization1, L=CityOrLocality1, ST=StateOrProvince1, C=CountryCode1, EMAILADDRESS=email1@gmail.com"
总结
以上便是想要介绍的keytool基本方法使用啦