当前位置: 首页 > news >正文

证书学习(一)keytool 工具使用介绍

目录

    • 一、keytool 简介
      • 1.1 什么是 keytool?
      • 1.2 主要功能:
      • 1.3 使用场景
      • 1.4 常用命令
      • 1.5 默认参数
    • 二、keytool 用法说明
      • 2.1 基本使用
      • 2.2 创建密钥库和密钥条目
      • 2.3 查看密钥库信息
      • 2.4 导出密钥库条目证书
      • 2.5 导入信任证书到密钥库
      • 2.6 打印证书内容
      • 2.7 删除密钥库条目
      • 2.8 证书签发与导入
        • 第一步:-genkeypair 命令,创建 `test.keystore` 密钥库
        • 第二步:-certreq 命令,生成证书签名请求文件CSR
        • 第三步:-gencert 命令,签发证书
        • 第四步:-importcert 命令,导入签发证书到密钥库
          • 1)导出 test.keystore 的信任证书:
          • 2)将信任证书 test.crt 以其别名 “test” 导入到密钥库 bo.keystore 中:
          • 3)将签发证书 test_to_bo.crt 以别名 “www.bo.org” 导入到密钥库 bo.keystore:
          • 4)验证证书导入结果:
          • 5)验证结果:
    • 三、补充
      • 3.1 导出 .p12/.pfx 文件
      • 3.2 -importkeystore 命令
    • 四、总结

  • keytool官方文档: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html

一、keytool 简介

1.1 什么是 keytool?

keytool 是 Java 开发工具包 JDK1.4 之后引入的一个命令行工具,用于管理和生成 密钥对数字证书 以及管理 密钥库。它主要用于安全通信和身份验证,通过使用公钥/私钥对和相关证书实现自我认证。

keytool 将密钥和证书存储在所谓的 “密钥库” 中,这是一种安全的存储设施,可以保护敏感信息免受未经授权的访问。

keytool 命令位置:

%JAVA_HOME%\bin\keytool.exe

1.2 主要功能:

  1. 生成密钥对: 可以创建新的公钥和私钥对,并将其存储在指定的密钥库。
  2. 生成证书请求(CSR): 可以生成证书签名请求(Certificate Signing Request),并将其提交给CA(证书办法机构)进行签发。
  3. 导入和导出证书: 可以从密钥库中导入或导出证书,支持多种格式。
  4. 查看和操作密钥库: 可以列出密钥库中的所有条目,包括公钥、私钥和证书链等信息。
  5. 转换密钥库格式: 可以将密钥库从一种格式转换为另一种格式,例如从 PKCS12 转换为 Jks
  6. 自签名证书: 可以创建自签名的证书,用于测试和开发环境中的安全通信。
  7. 证书吊销列表文件: 可以生成证书吊销列表文件,用于跟踪已撤销的证书。

1.3 使用场景

keytool 广泛应用于各种需要证书签名和身份验证的场景,如:

  • SSL/TLS 配置安全电子邮件Web服务 等等。

它可以帮助开发者轻松管理证书和密钥,确保系统的安全性。

1.4 常用命令

使用 keytool 生成自签名证书:

  • 带解释命令:
keytool -genkey -alias test(别名) 
-keypass 123123(私钥密码) 
-keyalg RSA(算法) 
-sigalg sha256withrsa(算法小类) 
-keysize 1024(密钥长度) 
-validity 365(有效期)
-keystore d:/keystore/test.jks(生成路径) 
-storepass 123123(主密码)
  • 生成 jks 文件,原始命令:
keytool -genkey -alias test -keypass 123123 -keyalg RSA -sigalg sha256withrsa -keysize 1024 -validity 365 -keystore d:/keystore/test.jks -storepass 123123
  • 生成 p12 文件,原始命令:
keytool -genkey -alias 别名 -keypass 密码 -keyalg RSA -keysize 2048 -validity 365 -keystore  文件路径/文件名.p12 -storepass 密码 -deststoretype pkcs12

1.5 默认参数

keytool 命令的默认参数如下:

-alias "mykey"-keyalg"DSA" (when using -genkeypair)"DES" (when using -genseckey)-keysize2048 (when using -genkeypair and -keyalg is "RSA")2048 (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>-destkeystore <the file named .keystore in the user's home directory>-storetype <the value of the "keystore.type" property in thesecurity properties file, which is returned by the staticgetDefaultType method in java.security.KeyStore>-filestdin (if reading)stdout (if writing)-protected false

二、keytool 用法说明

2.1 基本使用

keytool 的语法如下:

  • keytool [选项]

选项如下:

 -gencert            根据证书请求生成证书-genkeypair         生成密钥对(简写-genkey)-genseckey          生成密钥-importcert         导入证书或证书链-importpass         导入口令-importkeystore     从其他密钥库导入一个或所有条目-certreq            生成证书请求-exportcert         导出证书-list               列出密钥库中的条目-printcertreq       打印证书请求的内容-printcert          打印证书内容-printcrl           打印 CRL 文件的内容-storepasswd        更改密钥库的存储口令(简写-storepass)-keypasswd          更改条目的密钥口令-delete             删除条目-changealias        更改条目的别名-help               帮助使用 "keytool -command_name -help" 获取 command_name 的用法

想要了解某个命令的参数可以使用 keytool -command_name -help 来查看具体用法。例如:

  • keytool -genkeypair -help:可以查看 genkeypair 命令的参数说明:
D:\test>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" 获取所有可用命令

keytool 有许多命令使用的参数是有默认值的,使用命令时可以不指定,常见的默认参数如下:

  • 密钥算法-keyalg):默认为 RSA
  • 密钥大小-keysize):默认为 2048 位。
  • 密钥库类型-keystore):默认为 JKS(Java keystore)。
  • 密钥库密码-storepass):没有默认值,需要用户输入。
  • 密钥密码-keypass):如果未指定,将使用密钥库密码作为密钥密码。
  • 密钥有效期-validity):默认为 365 天。
  • 密钥库文件-keystore):如果未指定,将使用 .keystore 文件。

例如:

  • 下面是一个创建密钥对的命令,使用了一些默认参数:
keytool -genkeypair -alias example -keyalg RSA -keysize 2048 -validity 365

在这个命令中,-alias 用于指定密钥对的别名,其他参数使用默认值。

2.2 创建密钥库和密钥条目

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

有两种方式来生成密钥条目:

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

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

keytool -genkeypair -alias www.bo.org -keyalg RSA -keystore d:\keystore\bo.keystore -storetype pkcs12
  • -genkeypair:简写 -genkey生成一对非对称密钥,并将公钥包装到 X.509 v3 自签名证书中;
  • -alias指定密钥条目的别名,该别名是公开的;
  • -keyalg指定加密算法,本例中采用通用的 RSA 加密算法;
  • -keystore指定密钥库的路径及名称,若密钥库不存在则创建。若不指定则默认在操作系统的用户目录下生成一个 .keystore 的文件;
  • -storetype指定密钥库的类型,如果不指定,默认是 JKS。如果创建默认类型密钥库,命令行会提示转化为 pkcs12 类型,所以这里在创建时指定。

执行后,会需要填写相关的信息,如下所示:

输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?[Unknown]:  www.bo.org
您的组织单位名称是什么?[Unknown]:  baidu
您的组织名称是什么?[Unknown]:  baidu
您所在的城市或区域名称是什么?[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 参数指定条目的密钥口令,如果没有指定则会在最后一步提示 输入该条目的密钥口令,如果与密钥库口令相同按回车,一般设为与密钥库口令相同。
  5. 如果创建 PKCS12 类型的密钥库,则会忽略条目的密钥口令相关参数,因为 PKCS12 不支持设置密钥库条目密码,默认它与密钥库密码一致。

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

2.3 查看密钥库信息

例如:查看名为 “bo.keystore” 的密钥库信息。

命令如下:

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

执行结果:

输入密钥库口令:密钥库类型: JKS
密钥库提供方: SUN您的密钥库包含 1 个条目别名: www.bo.org
创建日期: 2024-8-21
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=www.bo.org, OU=baidu, O=baidu, L=bj, ST=bj, C=cn
发布者: CN=www.bo.org, OU=baidu, O=baidu, L=bj, ST=bj, C=cn
序列号: 209f255e
有效期开始日期: Wed Aug 21 16:54:14 CST 2024, 截止日期: Tue Nov 19 16:54:14 CST 2024
证书指纹:MD5: 99:4A:45:9D:B0:21:AA:98:BB:50:CC:E3:27:F1:64:72SHA1: 8A:DF:0E:6A:6B:B0:E3:7D:ED:90:6D:64:D0:F8:1C:72:C6:91:94:0DSHA256: E1:88:EF:C4:C2:AC:F3:FA:F2:A0:C4:B4:A7:5E:40:24:24:3E:EE:DA:97:6D:82:E3:CB:3C:60:07:B9:97:35:1B签名算法名称: SHA256withRSA版本: 3扩展:#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: BB CB 38 12 73 3A F8 3A   90 0E 23 02 2F D9 44 BC  ..8.s:.:..#./.D.
0010: 0A 5C CD 96                                        .\..
]
]*******************************************
*******************************************

2.4 导出密钥库条目证书

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

命令如下:

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

运行结果:

输入密钥库口令:
存储在文件 <d:\keystore\bo.crt> 中的证书
  • 该命令会在操作系统的指定目录下生成一个 “bo.crt” 的文件,注意该证书文件不包含私钥。

2.5 导入信任证书到密钥库

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

命令如下:

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

执行结果:

输入密钥库口令:所有者: CN=Badb, OU=X/Secure, O=Baltimore Technologies Ltd., ST=Dublin, C=IE
发布者: CN=Another Transient CA, OU=X/Secure, O=Baltimore Technologies Ltd., ST=Dublin, C=IE
序列号: ecf921674a
有效期开始日期: Wed Apr 03 07:59:57 CST 2002, 截止日期: Tue Apr 03 06:59:46 CST 2012
证书指纹:MD5: 12:F1:0E:0E:78:23:D2:05:51:BE:5A:AF:91:C9:4E:19SHA1: 2C:13:B3:7E:4B:04:DA:AD:7E:78:D9:99:0C:6E:4D:83:C0:72:CB:84SHA256: 8F:47:C8:66:E0:FC:63:82:4A:E2:69:AA:8F:2A:DB:A6:33:B1:C0:C5:6F:48:58:7A:9C:07:3E:00:77:42:01:8D签名算法名称: SHA1withDSA版本: 3扩展:#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 8A 1C 56 30 5A 32 12 7D                            ..V0Z2..
]
]#2: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [DigitalSignature
]#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 80 B4 04 6A CA D1 35 A8                            ...j..5.
]
]是否信任此证书? []:  y
证书已添加到密钥库中

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

命令如下:

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

执行结果:

输入密钥库口令:密钥库类型: JKS
密钥库提供方: SUN您的密钥库包含 2 个条目别名: www.bo.org
创建日期: 2024-8-21
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=www.bo.org, OU=baidu, O=baidu, L=bj, ST=bj, C=cn
发布者: CN=www.bo.org, OU=baidu, O=baidu, L=bj, ST=bj, C=cn
序列号: 209f255e
有效期开始日期: Wed Aug 21 16:54:14 CST 2024, 截止日期: Tue Nov 19 16:54:14 CST 2024
证书指纹:MD5: 99:4A:45:9D:B0:21:AA:98:BB:50:CC:E3:27:F1:64:72SHA1: 8A:DF:0E:6A:6B:B0:E3:7D:ED:90:6D:64:D0:F8:1C:72:C6:91:94:0DSHA256: E1:88:EF:C4:C2:AC:F3:FA:F2:A0:C4:B4:A7:5E:40:24:24:3E:EE:DA:97:6D:82:E3:CB:3C:60:07:B9:97:35:1B签名算法名称: SHA256withRSA版本: 3扩展:#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: BB CB 38 12 73 3A F8 3A   90 0E 23 02 2F D9 44 BC  ..8.s:.:..#./.D.
0010: 0A 5C CD 96                                        .\..
]
]*******************************************
*******************************************别名: test
创建日期: 2024-8-21
条目类型: trustedCertEntry所有者: CN=Badb, OU=X/Secure, O=Baltimore Technologies Ltd., ST=Dublin, C=IE
发布者: CN=Another Transient CA, OU=X/Secure, O=Baltimore Technologies Ltd., ST=Dublin, C=IE
序列号: ecf921674a
有效期开始日期: Wed Apr 03 07:59:57 CST 2002, 截止日期: Tue Apr 03 06:59:46 CST 2012
证书指纹:MD5: 12:F1:0E:0E:78:23:D2:05:51:BE:5A:AF:91:C9:4E:19SHA1: 2C:13:B3:7E:4B:04:DA:AD:7E:78:D9:99:0C:6E:4D:83:C0:72:CB:84SHA256: 8F:47:C8:66:E0:FC:63:82:4A:E2:69:AA:8F:2A:DB:A6:33:B1:C0:C5:6F:48:58:7A:9C:07:3E:00:77:42:01:8D签名算法名称: SHA1withDSA版本: 3扩展:#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 8A 1C 56 30 5A 32 12 7D                            ..V0Z2..
]
]#2: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [DigitalSignature
]#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 80 B4 04 6A CA D1 35 A8                            ...j..5.
]
]*******************************************
*******************************************
  • test.crt 是由另一个密钥库 test.keysotre 生成的证书,将其导入到密钥库 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: 回复中的公共密钥与密钥库不匹配

2.6 打印证书内容

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

命令如下:

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

执行结果:

所有者: CN=www.bo.org, OU=baidu, O=baidu, L=bj, ST=bj, C=cn
发布者: CN=www.bo.org, OU=baidu, O=baidu, L=bj, ST=bj, C=cn
序列号: 209f255e
有效期开始日期: Wed Aug 21 16:54:14 CST 2024, 截止日期: Tue Nov 19 16:54:14 CST 2024
证书指纹:MD5: 99:4A:45:9D:B0:21:AA:98:BB:50:CC:E3:27:F1:64:72SHA1: 8A:DF:0E:6A:6B:B0:E3:7D:ED:90:6D:64:D0:F8:1C:72:C6:91:94:0DSHA256: E1:88:EF:C4:C2:AC:F3:FA:F2:A0:C4:B4:A7:5E:40:24:24:3E:EE:DA:97:6D:82:E3:CB:3C:60:07:B9:97:35:1B签名算法名称: SHA256withRSA版本: 3扩展:#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: BB CB 38 12 73 3A F8 3A   90 0E 23 02 2F D9 44 BC  ..8.s:.:..#./.D.
0010: 0A 5C CD 96                                        .\..
]
]

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

2.7 删除密钥库条目

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

命令如下:

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

执行结果:

2.8 证书签发与导入

这个过程涉及到 3 个命令:-certreq-gencert-importcert

证书签发过程:

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

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

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

例如:将密钥库 test.keystore 签发的证书导入到 bo.keystore 中。

第一步:-genkeypair 命令,创建 test.keystore 密钥库

命令如下:

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

执行结果:

输入密钥库口令:再次输入新口令:您的名字与姓氏是什么?[Unknown]:  test
您的组织单位名称是什么?[Unknown]:  baidu
您的组织名称是什么?[Unknown]:  baidu
您所在的城市或区域名称是什么?[Unknown]:  bj
您所在的省/市/自治区名称是什么?[Unknown]:  bj
该单位的双字母国家/地区代码是什么?[Unknown]:  cn
CN=test, OU=baidu, O=baidu, L=bj, ST=bj, C=cn是否正确?[]:  y
第二步:-certreq 命令,生成证书签名请求文件CSR

命令如下:

keytool -certreq -alias www.bo.org -keystore d:\keystore\bo.keystore -file d:\keystore\cert.csr
  • 这条命令的作用是:将条目别名为 www.bo.org 的公钥和一些个人信息从密钥库 bo.keystore 文件中导出为 CSR 文件,作为证书请求文件。

执行结果:

第三步:-gencert 命令,签发证书

命令如下:

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 文件中。

执行结果:

第四步:-importcert 命令,导入签发证书到密钥库

命令如下:

keytool -importcert -file d:\keystore\test_to_bo.crt -alias www.bo.org -keystore d:\keystore\bo.keystore
  • 这条命令的作用是:将签发证书 test_to_bo.crt 更新到已存在别名 www.bo.org 的密钥库 bo.keystore 中。

执行结果:

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

命令如下:

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

执行结果:

2)将信任证书 test.crt 以其别名 “test” 导入到密钥库 bo.keystore 中:

命令如下:

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

执行结果:

输入密钥库口令:存储在文件 <d:\keystore\test.crt> 中的证书D:\keystore>keytool -importcert -file d:\keystore\test.crt -alias test -keystore d:\keystore\bo.keystore
输入密钥库口令:所有者: CN=test, OU=baidu, O=baidu, L=bj, ST=bj, C=cn
发布者: CN=test, OU=baidu, O=baidu, L=bj, ST=bj, C=cn
序列号: 642958b
有效期开始日期: Wed Aug 21 21:53:08 CST 2024, 截止日期: Tue Nov 19 21:53:08 CST 2024
证书指纹:MD5: BB:F7:AF:FF:60:BF:C8:A8:C2:D7:9F:5D:84:B7:E6:A0SHA1: 5A:9B:82:36:D3:5D:8A:0A:7B:59:9C:22:89:6E:43:7B:9C:DD:A7:ADSHA256: 46:F8:27:81:C4:42:A4:2B:08:CD:F2:E2:2E:2D:AC:FC:E9:6B:E3:83:D3:3E:2C:A0:B8:AA:8A:98:A3:D6:47:C7签名算法名称: SHA256withRSA版本: 3扩展:#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 5D 5B 4E 39 D6 6A DE 06   8E 3E 86 CF C0 AF 0F 6E  ][N9.j...>.....n
0010: 84 85 B2 74                                        ...t
]
]是否信任此证书? []:  y
证书已添加到密钥库中
3)将签发证书 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

执行结果:

4)验证证书导入结果:

此时,密钥库 bo.keystore 中别名为 www.bo.org 条目的自签名证书已被更新为由密钥库 test.keystore 签名的签发证书。可以通过之前介绍过的 -list 命令进行查看。

命令如下:

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

执行结果:

输入密钥库口令:密钥库类型: JKS
密钥库提供方: SUN您的密钥库包含 2 个条目别名: www.bo.org
创建日期: 2024-8-22
条目类型: PrivateKeyEntry
证书链长度: 2
证书[1]:
所有者: CN=www.bo.org, OU=baidu, O=baidu, L=bj, ST=bj, C=cn
发布者: CN=test, OU=baidu, O=baidu, L=bj, ST=bj, C=cn
序列号: 38e34d2
有效期开始日期: Wed Aug 21 22:14:04 CST 2024, 截止日期: Tue Nov 19 22:14:04 CST 2024
证书指纹:MD5: 4E:1B:5A:8A:D0:64:8B:81:CF:D9:0D:92:E0:B8:7E:A4SHA1: 14:3C:0E:CC:F0:5A:28:2A:CC:FF:33:34:C9:59:E5:C4:9A:6F:B9:3ASHA256: 9C:41:67:AC:59:AE:81:1A:15:23:5E:39:F1:D6:19:08:A0:3B:E8:8F:EA:C8:7D:07:BF:A4:0E:92:B9:AC:50:B4签名算法名称: SHA256withRSA版本: 3扩展:#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 5D 5B 4E 39 D6 6A DE 06   8E 3E 86 CF C0 AF 0F 6E  ][N9.j...>.....n
0010: 84 85 B2 74                                        ...t
]
]#2: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: BB CB 38 12 73 3A F8 3A   90 0E 23 02 2F D9 44 BC  ..8.s:.:..#./.D.
0010: 0A 5C CD 96                                        .\..
]
]证书[2]:
所有者: CN=test, OU=baidu, O=baidu, L=bj, ST=bj, C=cn
发布者: CN=test, OU=baidu, O=baidu, L=bj, ST=bj, C=cn
序列号: 642958b
有效期开始日期: Wed Aug 21 21:53:08 CST 2024, 截止日期: Tue Nov 19 21:53:08 CST 2024
证书指纹:MD5: BB:F7:AF:FF:60:BF:C8:A8:C2:D7:9F:5D:84:B7:E6:A0SHA1: 5A:9B:82:36:D3:5D:8A:0A:7B:59:9C:22:89:6E:43:7B:9C:DD:A7:ADSHA256: 46:F8:27:81:C4:42:A4:2B:08:CD:F2:E2:2E:2D:AC:FC:E9:6B:E3:83:D3:3E:2C:A0:B8:AA:8A:98:A3:D6:47:C7签名算法名称: SHA256withRSA版本: 3扩展:#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 5D 5B 4E 39 D6 6A DE 06   8E 3E 86 CF C0 AF 0F 6E  ][N9.j...>.....n
0010: 84 85 B2 74                                        ...t
]
]*******************************************
*******************************************别名: test
创建日期: 2024-8-22
条目类型: trustedCertEntry所有者: CN=test, OU=baidu, O=baidu, L=bj, ST=bj, C=cn
发布者: CN=test, OU=baidu, O=baidu, L=bj, ST=bj, C=cn
序列号: 642958b
有效期开始日期: Wed Aug 21 21:53:08 CST 2024, 截止日期: Tue Nov 19 21:53:08 CST 2024
证书指纹:MD5: BB:F7:AF:FF:60:BF:C8:A8:C2:D7:9F:5D:84:B7:E6:A0SHA1: 5A:9B:82:36:D3:5D:8A:0A:7B:59:9C:22:89:6E:43:7B:9C:DD:A7:ADSHA256: 46:F8:27:81:C4:42:A4:2B:08:CD:F2:E2:2E:2D:AC:FC:E9:6B:E3:83:D3:3E:2C:A0:B8:AA:8A:98:A3:D6:47:C7签名算法名称: SHA256withRSA版本: 3扩展:#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 5D 5B 4E 39 D6 6A DE 06   8E 3E 86 CF C0 AF 0F 6E  ][N9.j...>.....n
0010: 84 85 B2 74                                        ...t
]
]*******************************************
*******************************************
5)验证结果:
  • 对比最开始生成的密钥库 bo.keystore 的证书信息可发现,别名为 “www.bo.org” 条目的 证书链已由单个 bo.keystore 自签名的证书变为 2 个证书,分别是 test.keystore 签名的 bo.keystore 证书、test.keystore 的自签名证书。

三、补充

3.1 导出 .p12/.pfx 文件

.p12.pfx 文件为同一类型,没有任何差异,均为 PKCS#12 格式,这是一种跨平台的标准格式,可以包含 私钥公钥证书,以及 证书链

  • 使用 keytool 的 -importkeystore 命令可以将 .jks.keystore 文件中的密钥和证书导出到 .p12 文件中。

命令如下:

keytool -importkeystore -srckeystore bo.keystore -srcalias www.bo.org -destkeystore bo.p12 -deststoretype pkcs12
  • -srckeystore:指定 源密钥库文件的路径
  • -srcalias:指定 要导出的密钥别名
  • -destkeystore:指定 目标密钥库文件的路径和名称
  • -deststoretype:指定 目标密钥库的类型(在这里是PKCS12)。

执行结果:

3.2 -importkeystore 命令

命令如下:

keytool -importkeystore -help

执行结果:

从其他密钥库导入一个或所有条目选项:-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                                    详细输出使用 "keytool -help" 获取所有可用命令

四、总结

总之,keytool 是一个功能强大且灵活的工具,能够满足大多数与密钥和证书管理相关的开发需求。通过熟练掌握其命令和参数,开发者可以高效地进行安全通信和身份验证操作。

整理完毕,完结撒花~🌻





参考地址:

1.Keytool 实用程序:Java数字证书和密钥管理的核心工具,https://developer.baidu.com/article/details/3310950
2.Java证书工具keytool用法总结,https://blog.csdn.net/w47_csdn/article/details/87564029

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Lesson 81+82 Roast beef and potatoes
  • RAG优化技巧 | 7大挑战与解決方式 | 提高你的LLM: 下篇
  • k8s 进阶实战笔记 | Ingress-traefik(一)
  • C++ | Leetcode C++题解之第363题矩形区域不超过K的最大数值和
  • 【linux】sar -d 磁盘性能
  • 【IEEE】第四届智能通信与计算国际学术会议(ICICC 2024,10月18-20)
  • vuejs 源代码启动 调试
  • Java中的持久化框架对比:JPA vs MyBatis
  • MAC 安装 MySQL
  • 计算机毕业设计选题推荐-花园管理系统-Java/Python项目实战
  • Linux | vim编辑器的使用技巧:自动缩进、补全括号、光标定位、批量注释
  • Spring Cloud LoadBalancer 源码解析
  • 前端CSS选择器
  • 页面设计任务 个人网站页面
  • Maven 管理依赖的详细步骤
  • 「面试题」如何实现一个圣杯布局?
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • css选择器
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JS基础之数据类型、对象、原型、原型链、继承
  • mongodb--安装和初步使用教程
  • select2 取值 遍历 设置默认值
  • Solarized Scheme
  • Sublime text 3 3103 注册码
  • 来,膜拜下android roadmap,强大的执行力
  • 一起参Ember.js讨论、问答社区。
  •  一套莫尔斯电报听写、翻译系统
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 正则表达式
  • nb
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • # centos7下FFmpeg环境部署记录
  • # wps必须要登录激活才能使用吗?
  • (2)Java 简介
  • (C++17) optional的使用
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 4.0发布后不能正常显示图片问题
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET 设计一套高性能的弱事件机制
  • .Net6使用WebSocket与前端进行通信
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .net连接MySQL的方法
  • .net连接oracle数据库
  • .pop ----remove 删除
  • /tmp目录下出现system-private文件夹解决方法