使用 keytool 生成密钥对 + keytool 命令详解
使用 keytool 生成密钥对 + keytool 命令详解
keytool是jdk提供用来生成SSL/TLS密钥的工具。
使用案例:
这里只考虑密钥仓库的使用,假设有AB两台服务器,A的证书为cerA,B的证书为cerB,可以通过keytool导出cer证书,该证书内部包含了公钥。
-
当需要双向认证的时候,比如内部服务器之间相互传输数据,为了安全考虑使用了SSL/TLS在传输层和应用层之间进行数据加密。为了进行双向认证,这时候就需要双方都持有对方的导出的证书。即需要将cerB导入进A服务器的密钥仓库,将cerA导入到B服务器的密钥仓库,这是服务双方都含有对方的公钥,可以进行双向认证。
-
当只需要单向认证的时候,一般是客户端验证服务端,所以客户端需要导入服务端的证书。
一、生成密钥对
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 详细输出