使用java -verbose查找java安装位置,输出结果最下方就是java安装路径
- 进入keytool.exe的文件目录下,默认安装路径为C:\Program Files (x86)\Java\jdk1.8.0_51\bin
- 查看keytool.exe命令,使用keytool -help命令
keytool命令详解
参数 | 作用 |
-certreq | 生成证书请求 |
-changealias | 更改条目的别名 |
-delete | 删除条目 |
-exportcert | 导出证书 |
-genkeypait | 生成密钥对 |
-genseckey | 生成密钥 |
-gencert | 根据证书请求生成证书 |
-importcert | 导入证书或证书链 |
-importkeystore | 从其他密钥库导入一个或所有条目 |
-keystore | 证书保存位置 |
-keyalg | 指定加密算法 |
-keypasswd | 更改条目的密钥口令 |
-list | 列出密钥库中的条目 |
-printcert | 打印证书内容 |
-printcertreq | 打印证书请求的内容 |
-printcrl | 打印CRL文件的内容 |
-storepasswd | 更改密钥库的存储口令 |
使用 keytool -help 获取所有可用命令
使用 keytoool -command_name -help 来获取上面的命令获取到的参数的用法
常用命令
-genkey 产生密钥对(genkeypair 简写);表示要创建一个新的密钥;alias和keystore缺省时,在用户主目录中创建一个”.keystore”文件,且别名为mykey,包含用户的公钥、私钥证书
-alias 产生证书别名,和keystore关联的唯一别名,不区分大小写(默认 `mykey`)
-keystore 指定密钥库文件的名称(默认在用户主目录创建证书库)
-keyalg 指定密钥的算法(可选择密钥算法:`RSA`、`DSA`、`EC`,默认`DSA`)
-keysize 指定密钥长度(与keyalg默认对应关系:`RSA=2048`、`DSA=2048`、`EC=256`)
-sigalg 指定签名算法(MD5和 SHA1的签名算法已经不安全)
-validity 指定证书有效期天数(默认 `90`天)
-storepass 指定密钥库口令,推荐与keypass一致(获取keystore信息所需的密码)
-storetype 指定密钥库的类型,可用类型为:JKS、PKCS12等。(jdk9以前,默认为JKS。自jdk9开始,默认为PKCS12)
-keypass 指定别名条目口令(私钥的密码)
-dname 指定证书发行者信息(其中 CN 要和服务器的 `域名` 或 `IP` 相同,本地测试则使用localhost,其他的可以不填)
-list 显示密钥库中的证书信息
-v 详细输出,显示密钥库中的证书详细信息
-file 指定导出或导出的文件名
-export 将别名指定的证书导出到文件(exportcert 简写)
-import 将已签名数字证书导入密钥库(importcert 简写)
-printcert 查看导出的证书信息
-delete 删除密钥库中某条目
-keypasswd 修改密钥库中指定条目口令
-storepasswd 修改keystore口令
-ext X.509 扩展
证书操作
创建证书
Usage:
keytool -genkey
-alias <alias>
-keyalg RSA
[-sigalg SHA256withRSA]
[-keysize 2048]
-keypass <keypasswd>
-keystore <keystore_file>
-storetype JKS|PKCS12
-storepass <keystore_passwd>
-validity 3650
-dname "CN=github.com,OU=github.com,Inc.,O=Github, Inc.,L=San Francisco,ST=California,C=US"
-ext SAN=dns:github.com,dns:www.github.com,ip:127.0.0.1
Options:
-genkey 产生密钥对(genkeypair 简写)
-alias 证书别名;和keystore关联的唯一别名,这个alias通常不区分大小写(默认`mykey`)
-keyalg 指定加密算法,RSA:非对称加密(默认`DSA`)
-sigalg 指定签名算法,可选;
-keysize 指定密钥长度,可选;
-keypass 指定别名条目口令(私钥的密码)
-storetype 生成证书类型,可用的证书库类型为:JKS、PKCS12等。(jdk9以前,默认为JKS。自jdk9开始,默认为PKCS12)
-keystore 指定产生的密钥库的位置;
-storepass 指定密钥库的存取口令,推荐与keypass一致
-validity 证书有效期天数;(默认为 90天)
-dname 表明了密钥的发行者身份(Distinguished Names)生成证书时,其中 CN 要和服务器的 `域名` 或 `IP` 相同,本地测试则使用localhost,其他的可以不填
-ext X.509 扩展
用例
keytool.exe -genkeypair -alias rootca -keyalg RSA -keysize 2048 -keypass 11111111 -validity 180 -keystore D:/lytest.jks -storepass 11111111
导出证书公钥
导出自签证书
Usage:
ytool -export
-alias <alias>
-keystore <keystore_file>
-storepass <keystore_passwd>
-file <file_cer>
[-rfc]
Options:
-export 执行证书导出操作(exportcert 简写)
-alias 密钥库中的证书条目别名(jks里可以存储多对公私钥文件,通过别名指定导出的公钥证书)
-keystore 指定密钥库文件
-storepass 密钥库口令
-file 导出文件的输出路径
-rfc 使用Base64格式输出(输出pem编码格式的证书,文本格式),不适用则导出的证书为DER编码格式
用例
- 需要输入密钥库口令keytool -export -alias rootca -keystore D:\lytest.jks -file D:\lytest.cer
- 不需要输入秘钥库口令keytool -export -alias rootca -keystore D:\lytest.jks -storepass 11111111 -file D:\lytest.cer
获取认证证书(生成CSR)
Usage:
keytool -certreq
-alias <alias>
-keystore <keystore_file>
-storepass <keystore_passwd>
-file <file_csr>
Options:
-certreq 执行证书签发申请导出操作
-alias 密钥库中的证书条目别名
-keystore 密钥库文件名称
-storepass 密钥库口令
-file 输出的csr文件路径
用例
- keytool -certreq -alias test -file D:\lytest.csr -keystore D:\lytest.jks
导入证书库
Usage:
keytool -import
[-trustcacerts]
-alias <alias_cer>
-keystore <keystore_file>
-storepass <keystore_passwd>
-file <file_cer>
Options:
-import 执行证书导入操作(importcert 简写)
-alias 指定导入密钥库中的证书别名(指定的条目别名不能与密钥库中已存在的条目别名重复(导入签发证书除外))
-trustcacerts 将证书导入信任库(信任来自 cacerts 的证书)
-keystore 密钥库名称
-storepass 密钥库口令
-file 输入文件名
签发证书(对CSR文件签发)
Usage:
keytool -gencert
[-trustcacerts]
-alias <alias_cer>
-keystore <keystore_file>
-storepass <keystore_passwd>
-infile <file_csr>
-outfile <file_cer>
Options:
-gencert 根据证书请求生成证书
-alias 指定导入密钥库中的证书别名(指定的条目别名不能与密钥库中已存在的条目别名重复(导入签发证书除外))
-keystore 密钥库名称
-storepass 密钥库口令
-infile 待签发的证书请求,csr文件
-outfile 签发的证书,cer文件
用例
keytool -gencert -alias rootca -infile D:\lytest.csr -outfile D:\lytest.cer -keystore D:\lytest.jks
导入证书
Usage:
keytool -importcert
-alias <alias_cer>
-keystore <keystore_file>
-storepass <keystore_passwd>
-file <file_cer>
Options:
-importcert 导入证书或证书链
-alias 指定导入密钥库中的证书别名(指定的条目别名不能与密钥库中已存在的条目别名重复(导入签发证书除外))
-keystore 密钥库名称
-storepass 密钥库口令
-file 证书或者证书链文件
用例
keytool -importcert -alias test -file D:\lytestcer -keystore D:\lytest.jks -storepass
查看证书
Usage:
# 查看单个证书(cer | crt)
keytool -printcert -file <cert_file> [-v|-rfc]
# 查看密钥库中的证书条目
keytool -list [-alias <alias_name>] -keystore <keystore_file> -storepass <keystore_passwd> [-v|-rfc]
# 查看生成的CSR证书请求
keytool -printcertreq -file <certreq_file>
Options:
-alias 密钥库中的证书条目别名;
-keystore 指定密钥库文件;
-storepass 密钥库口令;
-printcert 执行证书打印命令;
-list 缺省情况下,命令打印证书的 MD5 指纹。
如果指定了 -v 选项,将以可读格式打印证书,
如果指定了 -rfc 选项,将以可打印的编码格式输出证书。
其他命令
# 删除keystore里面指定证书条目
keytool -delete -alias <alias> -keystore <keystore_file> -storepass <keystore_passwd>
# 修改条目别名
keytool -changealias -keystore <keystore_file> -alias <old_alias> -destalias <new_alias>
# 修改条目密码
keytool -keypasswd -alias <alias> -keypass <old_keypasswd> -new <new_keypasswd> -keystore <keystore_file> -storepass <keystore_passwd>
# 修改keysore密码
keytool -storepasswd -new <new_storepasswd> -keystore <keystore_file> -storepass <old_storepasswd>
# 列出信任的CA证书(查看 JVM的信任库中的证书,storepass 默认为changeit)
## 该证书文件存在于JAVA_HOME\jre\lib\security目录下,是Java系统的CA证书仓库,可以用 'alias' 来查看证书是否真的导入到JVM中
keytool -list -v [-alias clientCer] -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
# 导入新的CA到信任证书,导入到 JRE的信任证书库
## 常出现的异常:“未找到可信任的证书” -- 主要原因为在客户端未将服务器下发的证书导入到JVM中。
keytool -import -trustcacerts -alias clientCer -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -file ~/ssl/client.cer
keytool GUI 工具导出私钥
阿里云盘分享
提取码: 75ff
- 连接数据库
- 输入数据库口令
- 选择要导出的条目
- 选择导出私钥
- 导出结果