Keytool简单介绍

keytool 是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。在JDK 1.4以后的版本中都包含了这一工具,它的位置为“%JAVA_HOME%\bin\keytool.exe”。

keytool用法说明

使用keytool工具时可以使用如下命令(各个JDK版本命令会有差异但会向下兼容,本例使用JDK1.8)

C:\Users\Administrator>keytool
密钥和证书管理工具

命令:

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

使用 "keytool -command_name -help" 获取 command_name 的用法

要了解某个命令的参数可以使用keytool –command_name –help来获取。例如:使用keytool –genkeypair –help可以查看genkeypair命令的参数说明:

C:\Users\Administrator>keytool -genkeypair -help
keytool -genkeypair [OPTION]...

生成密钥对

选项:

 -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                      通过受保护的机制的口令

使用 "keytool -help" 获取所有可用命令

有许多命令使用的参数是有默认值的,使用命令时可以不指定,以"-genkeypair"命令为例:

The following examples show the defaults for various option values.

-alias "mykey"
 
-keyalg
    "DSA" (when using -genkeypair)
    "DES" (when using -genseckey)
 
-keysize
    2048 (when using -genkeypair and -keyalg is "RSA")
    1024 (when using -genkeypair and -keyalg is "DSA")
    256 (when using -genkeypair and -keyalg is "EC")
    56 (when using -genseckey and -keyalg is "DES")
    168 (when using -genseckey and -keyalg is "DESede")
 
-validity 90
 
-keystore <the file named .keystore in the user's home directory>
 
-storetype <the value of the "keystore.type" property in the
    security properties file, which is returned by the static
    getDefaultType method in java.security.KeyStore, that is JKS>
 
-file
    stdin (if reading)
    stdout (if writing)
 
-protected false

-sigalg
    "SHA1withDSA" (when the underlying private key is of type DSA)
    "SHA256withRSA" (when the underlying private key is of type RSA)
    "SHA256withECDSA" (when the underlying private key is of type EC)

创建密钥库和密钥条目

说明:秘钥库是存储一个或多个密钥条目的文件,每个密钥条目应该以一个别名标识,它包含密钥和证书相关信息。

如果使用"keytool -genkeypair"命令生成密钥条目,则会生成一个密钥对(公钥和相关私钥)并将公钥包装到X.509 v3自签名证书中,该证书存储为单个元素证书链,此证书链和私钥存储在以别名标识的密钥库条目中,条目类型为PrivateKeyEntry。

如果使用"keytool -genseckey"命令生成密钥条目,则会生成一个密钥并将其存储在以别名标识的密钥库条目中,条目类型为SecretKeyEntry。

下面以"keytool -genkeypair"命令为例,创建一个新的密钥库并生成一个名为"www.bo.org"的条目。

cmd命令:

keytool -genkeypair -alias www.bo.org -keyalg RSA -keystore d:\keystore\bo.keystore -storetype pkcs12

参数说明:

-genkeypair:生成一对非对称密钥并将公钥包装到X.509 v3自签名证书中;

-alias:指定密钥条目的别名,该别名是公开的;

-keyalg:指定加密算法,本例中的采用通用的RSA加密算法;

-keystore:指定密钥库的路径及名称,若密钥库不存在则创建。若不指定则默认在操作系统的用户目录下生成一个".keystore"的文件;

-storetype:指定密钥库的类型,如果不指定,默认是JKS。如果创建默认类型密钥库,命令行会提示转化为pkcs12类型,所以这里在创建时指定;

输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
  [Unknown]:  www.bo.org
您的组织单位名称是什么?
  [Unknown]:  xinwei
您的组织名称是什么?
  [Unknown]:  xinwei
您所在的城市或区域名称是什么?
  [Unknown]:  bj
您所在的省/市/自治区名称是什么?
  [Unknown]:  bj
该单位的双字母国家/地区代码是什么?
  [Unknown]:  cn
CN=www.bo.org, OU=xinwei, O=xinwei, L=bj, ST=bj, C=cn是否正确?
  [否]:  y

注意:

1、如果指定的密钥库是第一次创建,则必须在创建时初始化一个条目

2、密钥库的密码至少必须6个字符,可以是纯数字或者字母或者数字和字母的组合等

3、"名字与姓氏"应该是输入域名,而不是我们的个人姓名,其他的可以不填

4、如果创建默认类型(JKS)的密钥库,则可附加"-keypass"参数指定条目的密钥口令,如果没有指定则会在最后一步提示"输入该条目的密钥口令,如果与密钥库口令相同按回车",一般设为与密钥库口令相同。如果创建PKCS12类型的密钥库,则会忽略条目的密钥口令相关参数,因为PKCS12不支持设置密钥库条目密码,默认它与密钥库密码一致。

执行完上述命令后,在操作系统的指定目录下生成了一个"bo.keystore"的文件。

查看密钥库信息

示例:查看名为bo.keystore的密钥库信息

 cmd命令:

keytool -list -v -keystore D:\keystore\bo.keystore

输入密钥库口令:
密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 1 个条目

别名: www.bo.org
创建日期: 2019-2-17
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=www.bo.org, OU=www.bo.org, O=xinwei, L=xinwei, ST=bj, C=bj
发布者: CN=www.bo.org, OU=www.bo.org, O=xinwei, L=xinwei, ST=bj, C=bj
序列号: 53e1769
有效期为 Sun Feb 17 21:42:31 CST 2019 至 Sat May 18 21:42:31 CST 2019
证书指纹:
         MD5:  D3:4B:91:FE:0D:08:77:D2:AC:8D:65:10:F1:26:30:2F
         SHA1: CB:43:4E:B5:03:5B:FC:60:FA:DC:BF:EC:02:E1:FA:C8:9C:53:D4:FE
         SHA256: 5D:44:89:D4:FF:1A:70:45:67:2D:3D:14:11:72:61:1D:D3:9A:EA:01:4B:
43:FD:38:F6:A9:38:B8:78:7D:53:3E
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: C6 AB A5 21 DC 68 97 79   91 5C D1 0D A3 3A C4 DA  ...!.h.y.\...:..
0010: 64 F7 73 3A                                        d.s:
]
]



*******************************************
*******************************************

 导出密钥库条目证书

示例:将密钥库bo.keystore中别名为www.bo.org条目的相关信息以及公钥导出到一个数字证书文件bo.crt中

cmd命令:

keytool -exportcert -keystore d:\keystore\bo.keystore -alias www.bo.org -file d:\keystore\bo.crt

输入密钥库口令:
存储在文件 <d:\keystore\bo.crt> 中的证书

 运行结果:在操作系统的指定目录下生成了一个"bo.crt"的文件,注意该证书文件不包含私钥。

导入信任证书到密钥库

示例:将信任证书test.crt以别名"test"导入到密钥库bo.keystore中

cmd命令:

keytool -importcert -file D:\keystore\test.crt -alias test -keystore D:\keystore\bo.keystore

输入密钥库口令:
所有者: CN=test, OU=xinwei, O=xinwei, L=bj, ST=bj, C=cn
发布者: CN=test, OU=xinwei, O=xinwei, L=bj, ST=bj, C=cn
序列号: c3cd021
有效期为 Sun Feb 17 21:44:45 CST 2019 至 Sat May 18 21:44:45 CST 2019
证书指纹:
         MD5:  61:BF:F3:13:EE:CB:7E:41:9B:1C:CD:C9:AC:34:6F:62
         SHA1: E5:C4:5A:22:4A:E2:39:2F:D1:8F:75:9F:4F:D5:94:20:EB:00:A9:A8
         SHA256: F2:6C:35:7E:07:F1:F3:7E:13:8D:A3:13:3E:34:6E:D9:D4:BF:FA:53:29:
8F:84:71:27:DC:DB:0A:26:2F:F7:1A
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 52 32 69 80 EF C3 A3 7B   FF A8 26 11 79 F5 65 1A  R2i.......&.y.e.
0010: 98 56 37 D5                                        .V7.
]
]

是否信任此证书? [否]:  y
证书已添加到密钥库中

导入test.crt证书后,查看密钥库bo.keystore信息,新增一个"test"条目:

keytool -list -v -keystore D:\keystore\bo.keystore

输入密钥库口令:
密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 2 个条目

别名: www.bo.org
创建日期: 2019-2-17
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=www.bo.org, OU=www.bo.org, O=xinwei, L=xinwei, ST=bj, C=bj
发布者: CN=www.bo.org, OU=www.bo.org, O=xinwei, L=xinwei, ST=bj, C=bj
序列号: 53e1769
有效期为 Sun Feb 17 21:42:31 CST 2019 至 Sat May 18 21:42:31 CST 2019
证书指纹:
         MD5:  D3:4B:91:FE:0D:08:77:D2:AC:8D:65:10:F1:26:30:2F
         SHA1: CB:43:4E:B5:03:5B:FC:60:FA:DC:BF:EC:02:E1:FA:C8:9C:53:D4:FE
         SHA256: 5D:44:89:D4:FF:1A:70:45:67:2D:3D:14:11:72:61:1D:D3:9A:EA:01:4B:
43:FD:38:F6:A9:38:B8:78:7D:53:3E
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: C6 AB A5 21 DC 68 97 79   91 5C D1 0D A3 3A C4 DA  ...!.h.y.\...:..
0010: 64 F7 73 3A                                        d.s:
]
]



*******************************************
*******************************************


别名: test
创建日期: 2019-2-17
条目类型: trustedCertEntry

所有者: CN=test, OU=xinwei, O=xinwei, L=bj, ST=bj, C=cn
发布者: CN=test, OU=xinwei, O=xinwei, L=bj, ST=bj, C=cn
序列号: c3cd021
有效期为 Sun Feb 17 21:44:45 CST 2019 至 Sat May 18 21:44:45 CST 2019
证书指纹:
         MD5:  61:BF:F3:13:EE:CB:7E:41:9B:1C:CD:C9:AC:34:6F:62
         SHA1: E5:C4:5A:22:4A:E2:39:2F:D1:8F:75:9F:4F:D5:94:20:EB:00:A9:A8
         SHA256: F2:6C:35:7E:07:F1:F3:7E:13:8D:A3:13:3E:34:6E:D9:D4:BF:FA:53:29:
8F:84:71:27:DC:DB:0A:26:2F:F7:1A
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 52 32 69 80 EF C3 A3 7B   FF A8 26 11 79 F5 65 1A  R2i.......&.y.e.
0010: 98 56 37 D5                                        .V7.
]
]



*******************************************
*******************************************

注:test.crt是由另一个密钥库test.keystore生成的证书,将其导入到密钥库bo.keystore时指定的条目别名不能与密钥库中已存在的条目别名重复(导入签发证书除外),一般与导出该证书的密钥库条目别名相同,此时的导入条目会以信任证书的形式保存,条目类型为 trustedCertEntry。

尝试将证书test.crt以别名"www.bo.org"导入到密钥库bo.keystore中,提示操作非法:

keytool -importcert -file D:\keystore\test.crt -alias www.bo.org -keystore D:\keystore\bo.keystore

输入密钥库口令:
keytool 错误: java.lang.Exception: 回复中的公共密钥与密钥库不匹配

打印证书内容

示例:打印密钥库bo.keystore中别名为www.bo.org条目导出的证书bo.crt

cmd命令:

keytool -printcert -v -file d:\keystore\bo.crt

所有者: CN=www.bo.org, OU=www.bo.org, O=xinwei, L=xinwei, ST=bj, C=bj
发布者: CN=www.bo.org, OU=www.bo.org, O=xinwei, L=xinwei, ST=bj, C=bj
序列号: 53e1769
有效期为 Sun Feb 17 21:42:31 CST 2019 至 Sat May 18 21:42:31 CST 2019
证书指纹:
         MD5:  D3:4B:91:FE:0D:08:77:D2:AC:8D:65:10:F1:26:30:2F
         SHA1: CB:43:4E:B5:03:5B:FC:60:FA:DC:BF:EC:02:E1:FA:C8:9C:53:D4:FE
         SHA256: 5D:44:89:D4:FF:1A:70:45:67:2D:3D:14:11:72:61:1D:D3:9A:EA:01:4B:
43:FD:38:F6:A9:38:B8:78:7D:53:3E
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: C6 AB A5 21 DC 68 97 79   91 5C D1 0D A3 3A C4 DA  ...!.h.y.\...:..
0010: 64 F7 73 3A                                        d.s:
]
]

注:也可以使用 -sslserver ip:port 的参数,直接从网络上打印出某个 ssl server 提供的证书的内容 。

删除密钥库条目

示例:删除密钥库bo.keystore中别名为test的证书条目

cmd命令:

keytool -delete -keystore D:\keystore\bo.keystore -alias test

输入密钥库口令:

证书签发与导入

这个过程涉及到3个命令:

-certreq、-gencert、-importcert

1)机构A使用certreq命令生成一个证书签名请求文件CSR(certificate sign request)并将其发送给机构B;

2)机构B接收到这个请求后,使用gencert命令签发证书,会生成一个证书或者证书链;

3)机构A接收到响应,使用importcert命令将签发证书导入到keystore中;

示例:将密钥库test.keystore签名的证书导入到密钥库bo.keystore中

首先创建test.keystore密钥库

keytool -genkeypair -alias test -keyalg RSA -keystore d:\keystore\test.keystore -storetype pkcs12

输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
  [Unknown]:  test
您的组织单位名称是什么?
  [Unknown]:  xinwei
您的组织名称是什么?
  [Unknown]:  xinwei
您所在的城市或区域名称是什么?
  [Unknown]:  bj
您所在的省/市/自治区名称是什么?
  [Unknown]:  bj
该单位的双字母国家/地区代码是什么?
  [Unknown]:  cn
CN=test, OU=xinwei, O=xinwei, L=bj, ST=bj, C=cn是否正确?
  [否]:  y

生成证书签名请求文件CSR

keytool -certreq -alias www.bo.org -keystore d:\keystore\bo.keystore -file d:\keystore\cert.csr

输入密钥库口令:

解释:将条目别名为 www.bo.org 的公钥和一些个人信息从密钥库 bo.keystore 文件中导出,作为证书请求文件。

签发证书

keytool -gencert -infile d:\keystore\cert.csr -outfile d:\keystore\test_to_bo.crt -alias test -keystore d:\keystore\test.keystore

输入密钥库口令:

解释:使用密钥库test.keystore中别名为 test 的条目私钥为 cert.csr 签发证书,并保存到 test_to_bo.crt 文件中。

 导入签发证书到密钥库

keytool -importcert -file D:\keystore\test_to_bo.crt -alias www.bo.org -keystore D:\keystore\bo.keystore

输入密钥库口令:
keytool 错误: java.lang.Exception: 无法从回复中建立链

解释:将签发证书 test_to_bo.crt 更新到已存在别名 ww.bo.org 的密钥库 bo.keystore 文件中

命令行提示错误"无法从回复中建立链",这是因为在更新被签发证书之前,一定要先将签发证书的机构的信任证书导入到密钥库文件,即将密钥库test.keystore的证书以其相应的别名导入到密钥库bo.keystore中。

导出test.keystore的信任证书:

keytool -exportcert -keystore d:\keystore\test.keystore -alias test -file d:\keystore\test.crt

输入密钥库口令:
存储在文件 <d:\keystore\test.crt> 中的证书

将信任证书test.crt以其别名"test"导入到密钥库bo.keystore:

keytool -importcert -file D:\keystore\test.crt -alias test -keystore D:\keystore\bo.keystore

输入密钥库口令:
所有者: CN=test, OU=xinwei, O=xinwei, L=bj, ST=bj, C=cn
发布者: CN=test, OU=xinwei, O=xinwei, L=bj, ST=bj, C=cn
序列号: c3cd021
有效期为 Sun Feb 17 21:44:45 CST 2019 至 Sat May 18 21:44:45 CST 2019
证书指纹:
         MD5:  61:BF:F3:13:EE:CB:7E:41:9B:1C:CD:C9:AC:34:6F:62
         SHA1: E5:C4:5A:22:4A:E2:39:2F:D1:8F:75:9F:4F:D5:94:20:EB:00:A9:A8
         SHA256: F2:6C:35:7E:07:F1:F3:7E:13:8D:A3:13:3E:34:6E:D9:D4:BF:FA:53:29:
8F:84:71:27:DC:DB:0A:26:2F:F7:1A
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 52 32 69 80 EF C3 A3 7B   FF A8 26 11 79 F5 65 1A  R2i.......&.y.e.
0010: 98 56 37 D5                                        .V7.
]
]

是否信任此证书? [否]:  y
证书已添加到密钥库中

将签发证书test_to_bo.crt以别名"www.bo.org"导入到密钥库bo.keystore:

keytool -importcert -file D:\keystore\test_to_bo.crt -alias www.bo.org -keystore D:\keystore\bo.keystore

输入密钥库口令:
证书回复已安装在密钥库中

此时,密钥库bo.keystore中别名为www.bo.org条目的自签名证书已被更新为由密钥库test.keystore签名的签发证书:

keytool -list -v -keystore D:\keystore\bo.keystore

输入密钥库口令:
密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 2 个条目

别名: www.bo.org
创建日期: 2019-2-17
条目类型: PrivateKeyEntry
证书链长度: 2
证书[1]:
所有者: CN=www.bo.org, OU=www.bo.org, O=xinwei, L=xinwei, ST=bj, C=bj
发布者: CN=test, OU=xinwei, O=xinwei, L=bj, ST=bj, C=cn
序列号: 566b0d42
有效期为 Sun Feb 17 22:05:54 CST 2019 至 Sat May 18 22:05:54 CST 2019
证书指纹:
         MD5:  50:24:53:0D:9A:42:F7:5E:6E:C6:4D:27:21:B1:D3:4B
         SHA1: 28:47:47:87:E3:67:C1:88:85:57:A8:DF:1D:34:04:CC:C7:CC:EE:9C
         SHA256: E2:AC:94:A9:77:4B:5B:F1:DE:76:0E:DE:55:42:B4:12:8A:BD:D6:BA:0E:
9E:8B:3E:08:32:B5:A9:1A:80:13:42
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 52 32 69 80 EF C3 A3 7B   FF A8 26 11 79 F5 65 1A  R2i.......&.y.e.
0010: 98 56 37 D5                                        .V7.
]
]

#2: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: C6 AB A5 21 DC 68 97 79   91 5C D1 0D A3 3A C4 DA  ...!.h.y.\...:..
0010: 64 F7 73 3A                                        d.s:
]
]

证书[2]:
所有者: CN=test, OU=xinwei, O=xinwei, L=bj, ST=bj, C=cn
发布者: CN=test, OU=xinwei, O=xinwei, L=bj, ST=bj, C=cn
序列号: c3cd021
有效期为 Sun Feb 17 21:44:45 CST 2019 至 Sat May 18 21:44:45 CST 2019
证书指纹:
         MD5:  61:BF:F3:13:EE:CB:7E:41:9B:1C:CD:C9:AC:34:6F:62
         SHA1: E5:C4:5A:22:4A:E2:39:2F:D1:8F:75:9F:4F:D5:94:20:EB:00:A9:A8
         SHA256: F2:6C:35:7E:07:F1:F3:7E:13:8D:A3:13:3E:34:6E:D9:D4:BF:FA:53:29:
8F:84:71:27:DC:DB:0A:26:2F:F7:1A
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 52 32 69 80 EF C3 A3 7B   FF A8 26 11 79 F5 65 1A  R2i.......&.y.e.
0010: 98 56 37 D5                                        .V7.
]
]



*******************************************
*******************************************


别名: test
创建日期: 2019-2-17
条目类型: trustedCertEntry

所有者: CN=test, OU=xinwei, O=xinwei, L=bj, ST=bj, C=cn
发布者: CN=test, OU=xinwei, O=xinwei, L=bj, ST=bj, C=cn
序列号: c3cd021
有效期为 Sun Feb 17 21:44:45 CST 2019 至 Sat May 18 21:44:45 CST 2019
证书指纹:
         MD5:  61:BF:F3:13:EE:CB:7E:41:9B:1C:CD:C9:AC:34:6F:62
         SHA1: E5:C4:5A:22:4A:E2:39:2F:D1:8F:75:9F:4F:D5:94:20:EB:00:A9:A8
         SHA256: F2:6C:35:7E:07:F1:F3:7E:13:8D:A3:13:3E:34:6E:D9:D4:BF:FA:53:29:
8F:84:71:27:DC:DB:0A:26:2F:F7:1A
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 52 32 69 80 EF C3 A3 7B   FF A8 26 11 79 F5 65 1A  R2i.......&.y.e.
0010: 98 56 37 D5                                        .V7.
]
]



*******************************************
*******************************************

对比最开始生成的密钥库bo.keystore的证书信息可发现,别名为"www.bo.org"条目的证书链已由单个bo.keystore自签名的证书变为2个证书,分别是test.keystore签名的bo.keystore证书、test.keystore的自签名证书。

 

参考资料

http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/keytool.html

http://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html

Java安全套接字编程以及 keytool 使用最佳实践