1. keytool 是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。
2. Keystore:keytool将密钥和证书存在一个称为keystore的文件中。
 在keystore包含两种数据:
  密钥实体——密钥(secret key)又或者是私钥和配对密钥(非对称加密)
  可信任的证书实体——只包含公钥
 Alias(别名):每个keystore都关联这一个独一无二的alias,通常不区分大小写。
 Keystore存储位置:在没有制定生成位置的情况下,keystore会存到用户的系统默认目录,
如:对于window xp系统,会生成在系统的C:\Documents and Settings\UserName\下.keystore

用法
在JDK\Bin的目录下你就可以看到keytool的执行文件,不过不能双击执行,需要命令来操作.
常用命令 使用keytool -command_name -help 查看具体命令的用法

-certreq 生成证书请求
-changealias 更改条目的别名
-delete 删除条目
-exportcert 导出证书
-genkeypair 生成密钥对 创建证书
-genseckey 生成密钥
-gencert 根据证书请求生成证书
-importcert 导入证书或证书链
-importpass 导入口令
-importkeystore 从其他密钥库导入一个或所有条目
-keypasswd 更改条目的密钥口令
-list 列出密钥库中的条目
-printcert 打印证书内容
-printcertreq 打印证书请求的内容
-printcrl 打印 CRL 文件的内容
-storepasswd 更改密钥库的存储口令

3. 生成证书和密钥对 -genkeypair
创建一个别名为test1的证书,该证书存放在名为test.keystore的密钥库中,如果test.ketstore不存在则创建
keytool -genkeypair -alias test1 -keyalg RSA -keystore test.keystore

-genkeypair:生成一对非对称密钥;
-alias:指定密钥对的别名
-keyalg:指定加密算法,本例中的采用通用的RAS加密算法;
-keystore:密钥库的路径及名称

keytool android 公钥 keytools_keytool

4. 查看keystore库条目信息 -list
keytool -list -RFC -keystore test.keystore

-rfc” 表示以base64输出文件,否则以二进制输出。
test.keystore 也可以为 .jks格式 ;

使用-help 查看命令用法

keytool android 公钥 keytools_keytool_02


查看test.keystore条目信息

keytool android 公钥 keytools_keytool_03

5. 导出证书到文件 -exportcert
keytool -exportcert -alias test1 -file test1.cer -keystore test.keystore

test.keystore也可以是.jks的证书库
test1.cer也可以是.crt的后缀文件,包含证书的信息和证书的公钥,不包括私钥,可以公开

keytool android 公钥 keytools_非对称加密_04

6. 查看证书信息 -printcert

keytool -printcert -rfc -file test1.cer

keytool android 公钥 keytools_密钥对_05

7. 证书导入到别的keystore中,添加信任,新添的条目类型为truestedCertEntry。

(1)先从其他的keystore 中导出别名为test2 的证书,文件为test2.cer

keytool -exportcert -alias test2 -file test2.cer -keystore other.keystore

keytool android 公钥 keytools_加密算法_06

(2)将test2.cer 证书导入到test.keystore中,别名为test2

keytool -importcert -alias test2 -file test2.cer -keystore test.keystore

keytool android 公钥 keytools_keytool android 公钥_07


(3)再次查看test.keystore 的条目信息,发现新增test2,且类型和原来自身条目不同

keytool android 公钥 keytools_密钥对_08


8. 删除密钥库中的条目 -delete

keytool -delete -alias test2 -keystore test.keystore

keytool android 公钥 keytools_keytool_09

9. 修改证书条目口令 -keypasswd
keytool -keypasswd -alias test1 -keypass root123 -new 123456 -keystore test.keystore -storepass root123

-keypass:条目原始密码
-new:条目新密码
-storepass:密钥库的密码

10. 修改密钥库keystore口令 -storepasswd
keytool -storepasswd -new 123456 -keystore test.keystore -storepass root123

-storepass root123:密钥库原始密码
-new 123456:密钥库新密码

11. 修改条目信息 ,可以使用-help 查看具体操作
-selfcert –changealias