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

news2024/11/16 3:15:30

目录

    • 一、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)
 
-keysize
    2048 (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 the
    security properties file, which is returned by the static
    getDefaultType method in java.security.KeyStore>
 
-file
    stdin (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:72
         SHA1: 8A:DF:0E:6A:6B:B0:E3:7D:ED:90:6D:64:D0:F8:1C:72:C6:91:94:0D
         SHA256: 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:19
         SHA1: 2C:13:B3:7E:4B:04:DA:AD:7E:78:D9:99:0C:6E:4D:83:C0:72:CB:84
         SHA256: 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:72
         SHA1: 8A:DF:0E:6A:6B:B0:E3:7D:ED:90:6D:64:D0:F8:1C:72:C6:91:94:0D
         SHA256: 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:19
         SHA1: 2C:13:B3:7E:4B:04:DA:AD:7E:78:D9:99:0C:6E:4D:83:C0:72:CB:84
         SHA256: 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:72
         SHA1: 8A:DF:0E:6A:6B:B0:E3:7D:ED:90:6D:64:D0:F8:1C:72:C6:91:94:0D
         SHA256: 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:A0
         SHA1: 5A:9B:82:36:D3:5D:8A:0A:7B:59:9C:22:89:6E:43:7B:9C:DD:A7:AD
         SHA256: 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:A4
         SHA1: 14:3C:0E:CC:F0:5A:28:2A:CC:FF:33:34:C9:59:E5:C4:9A:6F:B9:3A
         SHA256: 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:A0
         SHA1: 5A:9B:82:36:D3:5D:8A:0A:7B:59:9C:22:89:6E:43:7B:9C:DD:A7:AD
         SHA256: 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:A0
         SHA1: 5A:9B:82:36:D3:5D:8A:0A:7B:59:9C:22:89:6E:43:7B:9C:DD:A7:AD
         SHA256: 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2066968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零工市场小程序应该有什么功能?

数字经济现如今正飞速发展&#xff0c;零工市场小程序在连接雇主与自由职业者方面发挥着越来越重要的作用。一个高效的零工市场小程序不仅需要具备基础的信息发布与匹配功能&#xff0c;还应该涵盖交易管理、安全保障以及个性化服务等多个方面。 那么&#xff0c;零工市场小程…

为什么企业跨国组网建议用SD-WAN?

SD-WAN成为企业跨国组网的首选方案&#xff0c;主要因为它在灵活性、智能化管理以及数据安全等方面具备显著优势。在企业进行跨国组网时&#xff0c;往往会面临网络连接复杂、流量管理难度大以及数据安全等诸多挑战&#xff0c;而SD-WAN能够有效应对这些难题。 首先&#xff0c…

Docker续1:

一、打包传输 1.打包 [rootlocalhost ~]# systemctl start docker [rootlocalhost ~]# docker save -o centos.tar centos:latest [rootlocalhost ~]# ls anaconda-ks.cfg centos.tar 2.传输 [rootlocalhost ~]# scp centos.tar root192.168.1.100:/root 3.删除镜像 [r…

场外个股期权杠杆率是多少如何计算倍数?

今天带你了解场外个股期权杠杆率是多少如何计算倍数&#xff1f;场外个股期权的杠杆大小不是固定的&#xff0c;而是取决于期权合约的价值和标的资产的价值之间的比例&#xff0c;一般来说场外个股期权的杠杆率大概在5-30倍甚至更高左右。 场外个股期权杠杆率是多少&#xff1…

罗德与施瓦茨RS SMW200A 最实用的一款矢量信号发生器

Rohde & Schwarz SMW200A 是一款适用于最苛刻应用的矢量信号发生器。由于其灵活性、性能和直观的操作&#xff0c;它是生成复杂、高质量数字调制信号的完美工具。 罗德与施瓦茨 SMW200A 是开发新型宽带通信系统、验证 3G 和 4G 基站或航空航天和国防领域所需的数字调制信号…

【软考】cpu的组成

目录 1. 说明2. cpu结构图3. 运算器3.1 说明3.2 主要功能3.3 算术逻辑单元3.4 累加寄存器3.5 数据缓冲寄存器DR3.6 状态条件寄存器PSW 4. 控制器4.1 说明4.2 指令寄存器(IR)4.3 程序计数器(PC)4.4 地址寄存器(AR)4.5 指令译码器(DD) 5. 寄存器组6. 例题6.1 例题1 1. 说明 1.cp…

Lighthouse ApexZ 尘埃粒子计数器审计追踪 数据完整性

在大型制药企业中&#xff0c;高效、准确且安全的样本处理与数据管理至关重要。这些企业不仅需要确保产品质量符合严格的监管要求&#xff0c;还需要优化流程以提高生产效率和降低成本。结合您提到的LIMS&#xff08;实验室信息管理系统&#xff09;和Lighthouse ApexZ便携式空…

行星搅拌炒锅的优点有哪些?

1、容积大&#xff0c;产量高。 2、火力大&#xff0c;独特的燃烧装置&#xff0c;升温快&#xff0c;温度高&#xff0c;炒出的物料色泽鲜艳&#xff0c;口味纯正。 3、不糊锅&#xff0c;独特的搅拌装置&#xff0c;可以覆盖锅体的每一个角落&#xff0c;使物料不糊锅&…

《黑神话 悟空》大火,通关后部分景区可免门票,72处《黑神话 悟空》取景地汇总!

重要提醒&#xff01;打通关的天命人们 免门票了&#xff01;72处《黑神话 悟空》取景地汇总。 8月20日&#xff0c;首个国产3A大作《黑神话:悟空》上线&#xff0c;这几天&#xff0c;大家基本很难不刷到这个热点。在这个游戏中&#xff0c;去了全国多个景区取景&#xff0c;…

城乡燃气安全监管平台 打造城市安全防护网

随着城市化进程的不断加快&#xff0c;燃气已成为现代生活中不可或缺的重要能源。然而&#xff0c;传统燃气管理方式的局限性逐渐显现&#xff0c;难以应对日益增长的安全监管需求。为此&#xff0c;旭华智能基于其在智慧城市领域的深厚积累&#xff0c;推出了燃气安全监管物联…

Spring Cloud + Easy Excel导出表格

在现代应用开发中&#xff0c;数据的导出和处理是一个非常常见的需求。Spring Cloud 和 Easy Excel 是两个强大的工具&#xff0c;可以帮助我们高效地完成这个任务。本文将介绍如何将这两个工具结合起来&#xff0c;实现表格数据的导出功能。 1.环境准备 在开始之前&#xff0…

shellcode汇编复习

shellcode汇编复习 一、 汇编代码复习二、 基础寄存器1. EAX (Accumulator Register)2. EBX (Base Register)3. ECX (Count Register)4. EDX (Data Register)5. ESI (Source Index Register)6. EDI (Destination Index Register) 二、 基础指令1. mov - 数据传送2. add - 加法3…

vue js 前端同时下载多个文件,前端多文件下载

在日常需求中&#xff0c;一般情况下&#xff0c;单次点击下载文件数量一般是一个&#xff0c;当然也有多个文件同时下载的需求&#xff0c;由于浏览器机制&#xff0c;不支持直接多个文件下载&#xff0c;所有需要特殊处理 案例图 不多说了&#xff0c;直接上代码 //下载文…

Transformer经典模型实战:零基础训练一个面向中文的T5模型(Text to Text Transfer Transformer)

scient scient一个用python实现科学计算相关算法的包&#xff0c;包括自然语言、图像、神经网络、优化算法、机器学习、图计算等模块。 scient源码和编译安装包可以在Python package index获取。 The source code and binary installers for the latest released version ar…

景联文科技提供语音采集服务:开启智能交互新纪元

随着人工智能技术的飞速发展&#xff0c;语音交互已成为连接人与智能设备的重要桥梁。无论是智能助手、智能家居还是自动驾驶汽车&#xff0c;语音识别技术都是其背后不可或缺的核心力量。 为了满足各行各业对高质量语音数据的需求&#xff0c;景联文科技凭借自身强大的数据采集…

XGen —— 导入Hou

动力学解算 选择description&#xff0c;转化为交互式Groom&#xff1b; 选择description&#xff0c;将引导线转化为曲线&#xff1b; 添加linearWire&#xff0c;并选择转化后的曲线生成解算线 选择上述生成的解算线&#xff0c;创建动力学&#xff1b; 导出解算的Xgen 导出a…

Edge SCDN:构建更快更安全的网络世界

什么是Edge SCDN&#xff1f; Edge SCDN&#xff0c;即边缘安全加速&#xff0c;是一种结合了传统CDN&#xff08;内容分发网络&#xff09;技术与网络安全防护功能的服务。传统的CDN通过在全球范围内分布服务器节点来加速网站内容的分发&#xff0c;提高访问速度和用户体验。…

备考计算机二级Python之Day4作业编程题

1、输入一个年份&#xff0c;输出是否为闰年。 #闰年条件&#xff1a;能被4整除但不能被100整除&#xff0c;或者能被400整除的年份都是闰年。 neval(input("请输入一个年份&#xff1a;")) if (n%40 and n%100!0) or (n%4000):print("该年份是闰年") els…

68 H3C SecPath F1000 (系统模块介绍-1)

68 H3C SecPath F1000 &#xff08;系统模块介绍&#xff09; 01-高可靠性 特性简介 高可靠性&#xff08;High Availability&#xff09;&#xff0c;简称为HA&#xff0c;能够在通信线路或设备产生故障时提供备用方案&#xff0c;当其中一个网络节点发生故障时&#xff0c…