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

    存放受信任的证书

 

     

    

 

posted @ 2018-06-11 22:31  Kevin.YangPA  阅读(1512)  评论(0编辑  收藏  举报