使用 keytool 生成密钥对 + keytool 命令详解

使用 keytool 生成密钥对 + keytool 命令详解

keytool是jdk提供用来生成SSL/TLS密钥的工具。
使用案例:
这里只考虑密钥仓库的使用,假设有AB两台服务器,A的证书为cerA,B的证书为cerB,可以通过keytool导出cer证书,该证书内部包含了公钥。

  1. 当需要双向认证的时候,比如内部服务器之间相互传输数据,为了安全考虑使用了SSL/TLS在传输层和应用层之间进行数据加密。为了进行双向认证,这时候就需要双方都持有对方的导出的证书。即需要将cerB导入进A服务器的密钥仓库,将cerA导入到B服务器的密钥仓库,这是服务双方都含有对方的公钥,可以进行双向认证。

  2. 当只需要单向认证的时候,一般是客户端验证服务端,所以客户端需要导入服务端的证书。

一、生成密钥对

keytool -genkeypair -alias own-alias -keyalg RSA 
-sigalg SHA256withRSA 
-dname "cn=zolmk,ou=zolmk,o=zolmk,l=HN,st=HN,c=CN" 
-validity 3650 -storetype JKS -keypass password 
-storepass password -keystore keystore.jks 

参数详解:

  • -genkeypair:原 -genkey,Java 1.6 之后更改,表示生成密钥对
  • -alias:产生别名,每个 keystore 都会关联这一个独一无二的 alias,alias 不区分大小写
  • -keyalg:指定产生密钥的算法
  • -keypass:指定别名条目的密码(私钥的密码)
  • -sigalg:签名算法名称
  • -dname:唯一判别名,cn 所有者名称,ou 组织单位名称,o 组织名称,l 城市或区域名称,st 州或省份名称,c 两字母国家代码
  • -validity:有效天数
  • -keystore:密钥库名称
  • -storetype:密钥库类型
  • -storepass:密钥库口令

二、查看密钥库

keytool -list -v -keystore keystore.jks -storepass "password"
  • -list:列出密钥库中的条目
  • -v:详细输出
  • -keystore:密钥库文件

三、keytool 全部命令

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

1)二级命令参数

-list 列出密钥库中的条目

命令示例:keytool -list -keystore keystore.jks -storepass password

 -rfc                            以 RFC 样式输出
 -alias <alias>                  要处理的条目的别名
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

-genkeypair 生成密钥对

命令示例:keytool -genkeypair -alias own-alias -keyalg RSA -sigalg SHA256withRSA -dname "cn=zolmk,ou=zolmk,o=zolmk,l=HN,st=HN,c=CN" -validity 3650 -storetype JKS -keypass password -storepass password -keystore keystore.jks

 -alias <alias>                  要处理的条目的别名
 -keyalg <keyalg>                密钥算法名称
 -keysize <keysize>              密钥位大小
 -sigalg <sigalg>                签名算法名称
 -destalias <destalias>          目标别名
 -dname <dname>                  唯一判别名
 -startdate <startdate>          证书有效期开始日期/时间
 -ext <value>                    X.509 扩展
 -validity <valDays>             有效天数
 -keypass <arg>                  密钥口令
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

-genseckey 生成密钥

 -alias <alias>                  要处理的条目的别名
 -keypass <arg>                  密钥口令
 -keyalg <keyalg>                密钥算法名称
 -keysize <keysize>              密钥位大小
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

-certreq 生成证书请求

 -alias <alias>                  要处理的条目的别名
 -sigalg <sigalg>                签名算法名称
 -file <filename>                输出文件名
 -keypass <arg>                  密钥口令
 -keystore <keystore>            密钥库名称
 -dname <dname>                  唯一判别名
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

-changealias 更改条目的别名

 -alias <alias>                  要处理的条目的别名
 -destalias <destalias>          目标别名
 -keypass <arg>                  密钥口令
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

-delete 删除条目

 -alias <alias>                  要处理的条目的别名
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

-exportcert 导出证书

命令示例:keytool -exportcert -alias nettyServer -keystore nettyServer.jks -file nettyServer.cer -storepass password

 -rfc                            以 RFC 样式输出
 -alias <alias>                  要处理的条目的别名
 -file <filename>                输出文件名
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

-gencert 根据证书请求生成证书

 -rfc                            以 RFC 样式输出
 -infile <filename>              输入文件名
 -outfile <filename>             输出文件名
 -alias <alias>                  要处理的条目的别名
 -sigalg <sigalg>                签名算法名称
 -dname <dname>                  唯一判别名
 -startdate <startdate>          证书有效期开始日期/时间
 -ext <value>                    X.509 扩展
 -validity <valDays>             有效天数
 -keypass <arg>                  密钥口令
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

-importcert 导入证书或证书链

命令示例:keytool -importcert -trustcacerts -alias nettyServer -file nettyServer.cer -storepass password -keystore nettyClient.jks

 -noprompt                       不提示
 -trustcacerts                   信任来自 cacerts 的证书
 -protected                      通过受保护的机制的口令
 -alias <alias>                  要处理的条目的别名
 -file <filename>                输入文件名
 -keypass <arg>                  密钥口令
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出

-importpass 导入口令

 -alias <alias>                  要处理的条目的别名
 -keypass <arg>                  密钥口令
 -keyalg <keyalg>                密钥算法名称
 -keysize <keysize>              密钥位大小
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

-importkeystore 从其他密钥库导入一个或所有条目

 -srckeystore <srckeystore>            源密钥库名称
 -destkeystore <destkeystore>          目标密钥库名称
 -srcstoretype <srcstoretype>          源密钥库类型
 -deststoretype <deststoretype>        目标密钥库类型
 -srcstorepass <arg>                   源密钥库口令
 -deststorepass <arg>                  目标密钥库口令
 -srcprotected                         受保护的源密钥库口令
 -srcprovidername <srcprovidername>    源密钥库提供方名称
 -destprovidername <destprovidername>  目标密钥库提供方名称
 -srcalias <srcalias>                  源别名
 -destalias <destalias>                目标别名
 -srckeypass <arg>                     源密钥口令
 -destkeypass <arg>                    目标密钥口令
 -noprompt                             不提示
 -providerclass <providerclass>        提供方类名
 -providerarg <arg>                    提供方参数
 -providerpath <pathlist>              提供方类路径
 -v                                    详细输出

-keypasswd 更改条目的密钥口令

 -alias <alias>                  要处理的条目的别名
 -keypass <arg>                  密钥口令
 -new <arg>                      新口令
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出

-printcert 打印证书内容

 -rfc                        以 RFC 样式输出
 -file <filename>            输入文件名
 -sslserver <server[:port]>  SSL 服务器主机和端口
 -jarfile <filename>         已签名的 jar 文件
 -v                          详细输出

-printcertreq 打印证书请求的内容

 -file <filename>  输入文件名
 -v                详细输出

-printcrl 打印 CRL 文件的内容

 -file <filename>  输入文件名
 -v                详细输出

-storepasswd 更改密钥库的储存口令

 -new <arg>                      新口令
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
posted @ 2020-12-08 11:08  zolmk  阅读(2696)  评论(0编辑  收藏  举报