oynix

于无声处听惊雷,于无色处见繁花

keytool命令使用

之前生成签名时,都是在Android Studio里点,点几下一个签名就出来了,作为一个开发者,学会使用keytool工具,手动进行一些签名相关的操作,如生成、查看、导出等,还是很能提供很多方便的。

java key store的管理方式为,签名一个应用需要一个key,一个key存在于一个keystore中,一个keystore中可以存在多个key。keystore拥有密码,同时,key也拥有密码。二者之间的关系可以这样理解,keystore相当于一个大房子,key则相当于房子里的一个房间,房子里可以有多个房间,进入房子需要钥匙,也就是密码,再想进入到某个房间,也需要这个房间的钥匙,也就是密码。不过,话说回来,一般常用的方式,都是一对一的形式,也就是一个keystore只存储一个key,这个key只用来签名一个应用,没有将keystore中的store的价值体现出来。

1. 支持的命令

keytool提供了很多的命令,通过help可以查看,其中,常用的只有生成、查看、导入导出,其他的就不说了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ keytool help
Illegal option: help
Key and Certificate Management Tool

Commands:

-certreq Generates a certificate request
-changealias Changes an entry's alias
-delete Deletes an entry
-exportcert Exports certificate
-genkeypair Generates a key pair
-genseckey Generates a secret key
-gencert Generates certificate from a certificate request
-importcert Imports a certificate or a certificate chain
-importpass Imports a password
-importkeystore Imports one or all entries from another keystore
-keypasswd Changes the key password of an entry
-list Lists entries in a keystore
-printcert Prints the content of a certificate
-printcertreq Prints the content of a certificate request
-printcrl Prints the content of a CRL file
-storepasswd Changes the store password of a keystore

Use "keytool -command_name -help" for usage of command_name

2. 生成

使用genkeypair命令

1
keytool -genkeypair -alias key0 -keypass 123456 -keystore test.jks -storepass 1234 -keyalg RSA -validity 2000 -keysize 2048 -dname "CN=abc,OU=def"

参数说明

  • alias:给key起个名字,一个keystore中key的名字不允许重复
  • keypass: 给key设置一个密码
  • keystore:生成的key要存放的目标keystore,如果不存在则会创建
  • storepass:keystore的密码,访问keystore就需要密码
  • keyalg:生成使用的算法,默认是DSA,常用RSA
  • validity:key的有效期,单位是天
  • keysize:key的长度,RSA2048,DSA2014,EC256,DES56,AES128
  • dname:key的详细信息,完整的是:CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位

3. 查看

使用list命令,这个命令会把keystore中所包含的所有key都展示出来

1
keytool -list -keystore test.jks -storepass 123456 -v

参数说明

  • keystore:要查看的keystore
  • storepass:keystore的密码
  • v:verbose 展示所有信息
  • rfc:以rfc的格式展示,和-v不能同时使用

4. 导出

使用exportcert命令,导出的是一个证书文件,也就是key

1
keytool -exportcert -alias key0 -keystore test.jks -storepass 123456 -file key0.crt

参数说明

  • alias:要导出的key的名字
  • keystore:同上
  • storepass:同上
  • file:导出的文件

5. 导入

使用importcert命令,将一个crt文件,也就是key,导入到keystore中

1
keytool -importcert -alias key0 -keypass 123456 -file key.crt -keystore test.jks -storepass 123456

参数说明

  • alias:给导入的key起个名字,不能和已存在的重复
  • keypass:给导入的key设置个密码
  • file:待导入的key的证书
  • keystore:目标keystore
  • storepass:密码

其他

genkeypair适用非对称加密,包括私钥和公钥。genseckey适用于对称加密,只有一个密钥。jks文件只能存储非对称加密。

------------- (完) -------------
  • 本文作者: oynix
  • 本文链接: https://oynix.com/2022/04/6920df894e5f/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道