Keytool和 keystore
Keytool 是一个有效的安全钥匙和证书的管理工具。keystore 是证书库和保存有私钥信息的文件。
在keystore里,包含两种数据:
- 密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)
- 可信任的证书实体(trusted certificate entries)——只包含公钥
Keytool可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存入证书库的中,证书库中的一条证书包含该条证书的私钥,公钥和对应的数字证书的信息。证书库中的一条证书可以导出数字证书文件,数字证书文件只包括主体信息和对应的公钥。
证书库里可以包含多个证书,它们通过别名区分。(建议只保存一个证书,证书库与证书密码保持一致)
默认调试keystore的生成
keytool -keyalg RSA -genkeypair -alias androiddebugkey -keypass android -keystore debug.keystore -storepass android -dname "CN=Android Debug,O=Android,C=US" -validity 9999
意思是:
-keyalg 密钥加密算法为RSA;
-genkeypair 和 -genkey 是一样的,添加密钥对。
-alias 添加条目 androiddebugkey
-keypass 条目密码 android
-keystore 证书库名字 debug.keystore
-storepass 证书库密码 android
-dname 证书实体信息 名称地址等信息
-validity 到期时间 9999 天
发布keystore的生成
首先需要注意的是,在Godot中,证书库密码需要和证书密码保持一致。所以在生成时需要注意。
keytool -v -genkey -v -keystore mygame.keystore -alias mygame -keyalg RSA -validity 10000
mygame.keystore
是证书库名字alias
后面的 mygame
是一个条目的名字
输入该命令后,会弹出各类信息的填写,包括证书库密码,证书实体信息(姓名,所在地)等,最后会问你的证书条目的密码是否要与证书库密码保持一致,答是即可。
最后会在当前目录下生成 mygame.keystore 文件
查看证书库里的证书信息
keytool -list -v -keystore mygame.keystore -storepass storepasswd
查看应用的证书(签名)信息
方法1:
首先解压apk包,然后进 META-INF 文件夹,其中保存了公钥等信息
keytool -printcert -file xxxx.RSA
其中 xxxx.RSA
是文件名,根据实际情况填写即可
方法2:
注意:apk 文件名中不能包含空格。
keytool -printcert -jarfile MyApp.apk
给空应用手动签名
jarsigner -keystore 密钥库名 xxx.apk 密钥条目名
根据提示输入密码即可
一些例子
keytool -genkey -dname "CN=fingki,OU=server,O=server,L=bj,ST=bj,C=CN" -alias myCA -keyalg RSA -keysize 1024 -keystore myCALib -keypass 654321 -storepass 123456 -validity 3650
以上命令将生成一个别名为myCA的自签名证书,证书的密码为654321,证书中实体信息为 "CN=fingki,OU=server,O=server,L=bj,ST=bj,C=CN",存储在名为myCALib.keystore文件中(如果没有将自动生成一个),这个keystore的密码为123456,密钥对产生的算法指定为RSA,有效期为10年。
keytool -genkey -alias duke -keypass dukekeypasswd -keystore debug.keystore
以上命令可以添加一个证书到证书库(debug.keystore)里