keytool
keytool
一、keytool是java自带的生成数字证书的一种命令工具,KeyStore里面存放3个实体,PrivateKeyEntry,SecretKeyEntry,TrustedCertificateEntry,一个条目就是条目名+实体。其实,密钥库里保存了两类信息,一类是密钥条目,另一类是可信证书条目,而证书里包含实体和公钥。keytool命令在jdk安装路 径的位置:/Library/java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/bin
二、java自带的密钥库在$JAVA_HOME/jre/lib/security目录下的cacerts文件
三、keytool命令的参数信息,在安装了jdk环境的pc下输入keytool -help,查看具体参数详解的信息可用keytool 参数 -help来实现
MBP-de-bitmain:bin bitmain$ keytool -help 密钥和证书管理工具 命令: -certreq 生成证书请求 -changealias 更改条目的别名 -delete 删除条目 -exportcert 导出证书 -genkeypair 生成密钥对 -genseckey 生成密钥 -gencert 根据证书请求生成证书 -importcert 导入证书或证书链 -importpass 导入口令 -importkeystore 从其他密钥库导入一个或所有条目 -keypasswd 更改条目的密钥口令 -list 列出密钥库中的条目 -printcert 打印证书内容 -printcertreq 打印证书请求的内容 -printcrl 打印 CRL 文件的内容 -storepasswd 更改密钥库的存储口令
四、常用命令
1> 生成密钥库:
keytool -genkey -v -keyalg RSA -alias keyAlias -keypass password -storepass password -keystore /Users/bitmain/learndemo/keytool/key.jks -v 详细输出 -alias 处理的条目的别名 -keyalg 密钥算法名称 -keypass 密钥口令 -storepass 密钥库口令 -keystore 密钥库名称 -storetype <storetype> 密钥库类型
如上命令在/Users/bitmain/learndemo/keytool下生成名为key.jks密钥库
注意:使用需要指列出部分参数,其他参数可通过keytool -genkey -help来查看。keytool -genkey 如果不指定条目的别名,会自动生成一个名为mykey的条目,条目可以理解成证书,storetype有jks,pkcs12两种类型,keyalg包含两种算法RSA,DSA,默认是DSA
2> 查看证书库信息
keytool -list -v -keystore key.jks 查看证书库信息
keytool -list -v -alias mykey -keystore key.jks 使用别名查看keystore特定条目
如下图:记录了密钥库类型:jks,密钥库中条目的数量,条目的别名,条目类型(默认添加的条目类型才是privatekeyentry),证书链的长度
3> 导出导入
keytool -export -alias mykey -keystore /Users/bitmain/learndemo/keytool/key.jks -file publickey.cer 导出密钥库中的证书(包含公钥的证书)
keytool -certreq -alias mykey -keystore /Users/bitmain/learndemo/keytool/key.jks -file key.csr // 为存在的keystore生成证书请求文件CSR(Certificate Signing Request证书请求文件) CSR在此不多做介绍
keytool -import -trustcacerts -alias google -file google.cer -keystore key.jks // 导入根证书或中级证书到keystore,导入之后可通过keytool -list
查看密钥库中多了一条别名为google的条目
4> 查看单个证书
keytool -printcert -v -file key.cer // 查看cer证书的内容
keytool -printcertreq -v -file key.csr // 查看csr文件的内容
5> 删除密钥库中的条目、修改密钥库的密码
keytool -delete -alias google -keystore key.jks // 从key.jks密钥库中删除别名为google的条目
keytool -storepasswd -new new_storepass -keystore key.jks // 修改密钥库的密码
五、java自带的密钥库cacerts
cacerts密钥库和密钥的密码默认是changeit
// 导入新的CA到信任证书
keytool -import -trustcacerts -file /path/to/ca/ca.pem -alias CA_ALIAS -keystore $JAVA_HOME/jre/lib/security/cacerts
六、说明:签发证书与信任证书:PrivateKeyEntry trustedCertEntry
- KeyStore.PrivateKeyEntry
存放一个加密的 非对称加密的 私钥, 他还附带一个对应的公钥的证书链
是可以通过keytool -export命令导出对应证书
- KeyStore.SecretKeyEntry
存放一个加密的对称加密的密钥
- KeyStore.TrustedCertificateEntry
存放受信任的证书