使用 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 详细输出

__EOF__

本文作者ZOLMK
本文链接https://www.cnblogs.com/zolmk/p/14101544.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   zolmk  阅读(2873)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示