前置准备

使用java -verbose查找java安装位置,输出结果最下方就是java安装路径

java 怎么验证证书的公钥密钥是一对_网络协议

  1. 进入keytool.exe的文件目录下,默认安装路径为C:\Program Files (x86)\Java\jdk1.8.0_51\bin

java 怎么验证证书的公钥密钥是一对_网络协议_02

  1. 查看keytool.exe命令,使用keytool -help命令

java 怎么验证证书的公钥密钥是一对_网络协议_03

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

java 怎么验证证书的公钥密钥是一对_github_04

导出证书公钥

导出自签证书

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编码格式

用例

  1. 需要输入密钥库口令keytool -export -alias rootca -keystore D:\lytest.jks -file D:\lytest.cer

java 怎么验证证书的公钥密钥是一对_java 怎么验证证书的公钥密钥是一对_05

  1. 不需要输入秘钥库口令keytool -export -alias rootca -keystore D:\lytest.jks -storepass 11111111 -file D:\lytest.cer

java 怎么验证证书的公钥密钥是一对_网络协议_06

获取认证证书(生成CSR)

Usage:

keytool -certreq 
        -alias <alias> 
        -keystore <keystore_file> 
        -storepass <keystore_passwd> 
        -file <file_csr>

Options:

-certreq    执行证书签发申请导出操作
-alias      密钥库中的证书条目别名
-keystore   密钥库文件名称
-storepass  密钥库口令
-file       输出的csr文件路径

用例

  1. keytool -certreq -alias test -file D:\lytest.csr -keystore D:\lytest.jks

java 怎么验证证书的公钥密钥是一对_用例_07

导入证书库

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

java 怎么验证证书的公钥密钥是一对_java 怎么验证证书的公钥密钥是一对_08

导入证书

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

java 怎么验证证书的公钥密钥是一对_java 怎么验证证书的公钥密钥是一对_09

查看证书

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

  1. 连接数据库
  2. 输入数据库口令
  3. 选择要导出的条目
  4. 选择导出私钥
  5. 导出结果