Keytool

管理私钥仓库(keystore)和与之相关的 X.509 证书链(用以验证与私钥对应的公钥),也可以用来管理其他信任实体

  • keytool 将密钥和证书存储在一个所谓的密钥仓库中,缺省的密钥仓库实现将密钥仓库实现为一个文件,用口令保护私钥

  • 在密钥仓库中存在两种不同的类型项 :

    • 密钥项(PrivateKeyEntry)

      存放极为敏感的加密密钥信息。这种信息以一种受保护的格式存储以防止未授权的访问,通常该密钥为机密密钥,或是伴有用于认证相应公钥用的证书"链"的私钥

    • 可信任证书项(TrustCertEntry)

      每项包含一个属于个人或团体的公钥证书

  • 密钥仓库别名(alias)

    1、对所有的密钥仓库项(密钥项和可信任证书项)的访问都要通过唯一的别名的进行,别名不区分大小写

    2、当用 -genkey 命令来生成密钥对(公钥和私钥)或者用 -import 命令来将证书或证书链加到可信任证书的清单中,以增加一个实体到密钥仓库中,必须指定了一个别名

    3、例如使用别名 duke 生成新的密钥对并将公钥用以下命令打包到自签名证书中(参见证书链)

    keytool -genkey -alias duke -keypass dukekeypasswd

    4、更改 duke de 私钥口令,可用如下命令

    keytool -keypasswd -alias duke -keypass dukekeypasswd -new 123456

  • 密钥仓库位置

    1、每个 keytool 命令都有一个 -keystore 选项,用于指定 keytool 管理的密钥仓库的永久密钥仓库文件名称及其位置。缺省情况下,密钥仓库存储在用户宿主目录下(由系统属性的 "user.home"决定)中名为 .keystore 的文件中

    2、当使用 -genkey 或 import 或 identitydb 时,如果像尚不存在的密钥仓库添加数据时就创建一个缺省的密钥仓库

    3、如果在 -keystore 选项中指定了一个并不存在的密钥仓库,则该密钥仓库将被创建

    4、如果不指定 -keystore 选项,则将创建一个缺省的密钥仓库 .keystore

命令

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

  • 查看 keytool 用法

    1. E:\keytoolTest>keytool -help
    2. 密钥和证书管理工具
    3. 命令:
    4. -certreq 生成证书请求
    5. -changealias 更改条目的别名
    6. -delete 删除条目
    7. -exportcert 导出证书
    8. -genkeypair 生成密钥对
    9. -genseckey 生成密钥
    10. -gencert 根据证书请求生成证书
    11. -importcert 导入证书或证书链
    12. -importpass 导入口令
    13. -importkeystore 从其他密钥库导入一个或所有条目
    14. -keypasswd 更改条目的密钥口令
    15. -list 列出密钥库中的条目
    16. -printcert 打印证书内容
    17. -printcertreq 打印证书请求的内容
    18. -printcrl 打印 CRL 文件的内容
    19. -storepasswd 更改密钥库的存储口令
    20. 使用 "keytool -command_name -help" 获取 command_name 的用法
  • 根据 keytool -command_name -help 提示,查看每个命令的用法,以 -genkeypair 命令为例

    1. E:\keytoolTest>keytool -genkeypair -help
    2. keytool -genkeypair [OPTION]...
    3. 生成密钥对
    4. 选项:
    5. -alias <alias> 要处理的条目的别名
    6. -keyalg <keyalg> 密钥算法名称
    7. -keysize <keysize> 密钥位大小
    8. -sigalg <sigalg> 签名算法名称
    9. -destalias <destalias> 目标别名
    10. -dname <dname> 唯一判别名
    11. -startdate <startdate> 证书有效期开始日期/时间
    12. -ext <value> X.509 扩展
    13. -validity <valDays> 有效天数
    14. -keypass <arg> 密钥口令
    15. -keystore <keystore> 密钥库名称
    16. -storepass <arg> 密钥库口令
    17. -storetype <storetype> 密钥库类型
    18. -providername <providername> 提供方名称
    19. -providerclass <providerclass> 提供方类名
    20. -providerarg <arg> 提供方参数
    21. -providerpath <pathlist> 提供方类路径
    22. -v 详细输出
    23. -protected 通过受保护的机制的口令
    24. 使用 "keytool -help" 获取所有可用命令

    解释 :

    1. 第 4 行 ,生成密钥对 表示该命令的作用是生成密钥对

    2. 第 6 行 ,选项表示紧接着必须在 -genkeypair 后面的可选项

    3. 第 8 行到第 26 行,表示每个选项的作用,以 -alias <alias> 选项为例,在使用生成密钥对时,在 -genkeypair 后面加上选项名 -alias ,紧接着在选项名后面输入选项值,例如 <alias> 替换成 tomcat,,如下所示

      keytool -genkeypair -alias tomcat ,生成别名为 tomcat 的密钥对

    4. 如果多个选项时,继续在第 3 步的基础上添加选项名和选项值,例如 :

      keytool -genkeypair -alias tomcat -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 365 -keypass 123456 -storepass 123456 -storetype JKS -keystore tomcat.keystore

      以上说明一下:

      ​ -keyalg RSA,说明生成的密钥对是 RSA 密钥

      -keysize 2048,说明密钥长度为 2048

      ​ -sigalg SHA256withRSA,说明使用 SHA256withRSA 签名算法生成证书

      ​ -validity 365,有效期 365 天

      ​ -keypass 123456,私钥密码(访问私钥使用,一般不建议直接写,要在终端输入)

      ​ -storepass 123456,密钥库密码(访问密钥库使用)

      ​ -storetype JKS,密钥库类型

      ​ -keystore tomcat.keystore,说明私钥和证书都保存在文件 tomcat.keystore

    • 执行第 4 步,就生成了一个 tomcat.keystore 文件

      1. E:\keytoolTest>keytool -genkeypair -alias tomcat -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 365 -keypass 123456 -storepass 123456 -storetype JKS -keystore tomcat.keystore
      2. 您的名字与姓氏是什么?
      3. [Unknown]: tomcat
      4. 您的组织单位名称是什么?
      5. [Unknown]: JNKY
      6. 您的组织名称是什么?
      7. [Unknown]: JNKY
      8. 您所在的城市或区域名称是什么?
      9. [Unknown]: GZ
      10. 您所在的省/市/自治区名称是什么?
      11. [Unknown]: GD
      12. 该单位的双字母国家/地区代码是什么?
      13. [Unknown]: CN
      14. CN=tomcat, OU=JNKY, O=JNKY, L=GZ, ST=GD, C=CN是否正确?
      15. [否]:
    • 生成 tomcat.keystore 之后,可以通过 -list 命令去查看

      • 了解 -list 命令用法
      1. E:\keytoolTest>keytool -list -help
      2. keytool -list [OPTION]...
      3. 列出密钥库中的条目
      4. 选项:
      5. -rfc RFC 样式输出
      6. -alias <alias> 要处理的条目的别名
      7. -keystore <keystore> 密钥库名称
      8. -storepass <arg> 密钥库口令
      9. -storetype <storetype> 密钥库类型
      10. -providername <providername> 提供方名称
      11. -providerclass <providerclass> 提供方类名
      12. -providerarg <arg> 提供方参数
      13. -providerpath <pathlist> 提供方类路径
      14. -v 详细输出
      15. -protected 通过受保护的机制的口令
      16. 使用 "keytool -help" 获取所有可用命令
      • 使用命令

        keytool -list -keystore tomcat.keystore

      1. E:\keytoolTest>keytool -list -keystore tomcat.keystore
      2. 输入密钥库口令:
      3. 密钥库类型: jks
      4. 密钥库提供方: SUN
      5. 您的密钥库包含 1 个条目
      6. tomcat, 2021-3-8, PrivateKeyEntry,
      7. 证书指纹 (SHA1): 0D:7F:86:A7:EB:2C:65:F6:62:4F:2C:D5:50:A7:7E:72:37:31:74:B0
      8. Warning:
      9. JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore tomcat.keystore -destkeystore tomcat.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12
      1. 当需要详细查看时(其他命令都是可选的)

      ​ keytool -list -keystore tomcat.keystore -v(这里输入的输入密钥库口令是第 4 步可选项的 123456( -storepass 123456))

      1. E:\keytoolTest>keytool -list -keystore tomcat.keystore -v
      2. 输入密钥库口令:
      3. 密钥库类型: jks
      4. 密钥库提供方: SUN
      5. 您的密钥库包含 1 个条目
      6. 别名: tomcat
      7. 创建日期: 2021-3-8
      8. 条目类型: PrivateKeyEntry
      9. 证书链长度: 1
      10. 证书[1]:
      11. 所有者: CN=tomcat, OU=JNKY, O=JNKY, L=GZ, ST=GD, C=CN
      12. 发布者: CN=tomcat, OU=JNKY, O=JNKY, L=GZ, ST=GD, C=CN
      13. 序列号: 28d0aa93
      14. 有效期为 Mon Mar 08 16:51:38 CST 2021 Tue Mar 08 16:51:38 CST 2022
      15. 证书指纹:
      16. MD5: 84:A6:F6:4E:5A:B2:F5:0C:F9:CA:CF:84:5B:9F:C3:DD
      17. SHA1: 0D:7F:86:A7:EB:2C:65:F6:62:4F:2C:D5:50:A7:7E:72:37:31:74:B0
      18. SHA256: 29:4A:5F:E9:57:73:58:90:33:6E:84:EE:E3:8C:C0:6E:7D:26:22:14:9C:3A:3A:D7:2F:32:BE:83:31:CD:B8:46
      19. 签名算法名称: SHA256withRSA
      20. 主体公共密钥算法: 2048 RSA 密钥
      21. 版本: 3
      22. 扩展:
      23. #1: ObjectId: 2.5.29.14 Criticality=false
      24. SubjectKeyIdentifier [
      25. KeyIdentifier [
      26. 0000: EA 21 0E 80 EC 2E D2 A8 CC CA 9B 1A 48 5D 31 95 .!..........H]1.
      27. 0010: D7 31 79 E9 .1y.
      28. ]
      29. ]
      30. *******************************************
      31. *******************************************
      32. Warning:
      33. JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore tomcat.keystore -destkeystore tomcat.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12

      密码不正确会报错

      1. E:\keytoolTest>keytool -list -keystore tomcat01.keystore -v
      2. 输入密钥库口令:
      3. keytool 错误: java.io.IOException: Keystore was tampered with, or password was incorrect
      4. java.io.IOException: Keystore was tampered with, or password was incorrect
      5. at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:780)
      6. at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56)
      7. at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224)
      8. at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70)
      9. at java.security.KeyStore.load(KeyStore.java:1445)
      10. at sun.security.tools.keytool.Main.doCommands(Main.java:926)
      11. at sun.security.tools.keytool.Main.run(Main.java:366)
      12. at sun.security.tools.keytool.Main.main(Main.java:359)
      13. Caused by: java.security.UnrecoverableKeyException: Password verification failed
      14. at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:778)
      15. ... 7 more

命令扩展

  • 生成一个测试使用的 tomcat01.keystore

    keytool -genkeypair -alias tomcat01 -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 365 -keypass 123456 -storepass 12345678 -storetype JKS -keystore tomcat01.keystore

-changealias 更改条目的别名命令

  • 查看命令用法

    1. E:\keytoolTest>keytool -changealias -help
    2. keytool -changealias [OPTION]...
    3. 更改条目的别名
    4. 选项:
    5. -alias <alias> 要处理的条目的别名
    6. -destalias <destalias> 目标别名
    7. -keypass <arg> 密钥口令
    8. -keystore <keystore> 密钥库名称
    9. -storepass <arg> 密钥库口令
    10. -storetype <storetype> 密钥库类型
    11. -providername <providername> 提供方名称
    12. -providerclass <providerclass> 提供方类名
    13. -providerarg <arg> 提供方参数
    14. -providerpath <pathlist> 提供方类路径
    15. -v 详细输出
    16. -protected 通过受保护的机制的口令
    17. 使用 "keytool -help" 获取所有可用命令
  • 将别名 -alias 为 tomcat01 的条目改为别名 -destalias 为 tomcat02的条目

    keytool -changealias -alias tomcat01 -destalias tomcat02 -keystore tomcat01.keystore -v

    注意 : 这里的 输入密钥库口令 指的是上面的 12345678 (-storepass 12345678),输入 <tomcat01> 的密钥口令 指的是 123456(-keypass 123456)

    1. E:\keytoolTest>keytool -changealias -alias tomcat01 -destalias tomcat02 -keystore tomcat01.keystore -v
    2. 输入密钥库口令:
    3. 输入 <tomcat01> 的密钥口令
    4. [正在存储tomcat01.keystore]
    5. Warning:
    6. JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore tomcat01.keystore -destkeystore tomcat01.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12
  • 查看是否更改成功

    keytool -list -keystore tomcat01.keystore -v ,输入密钥库口令: 指的是上面的 12345678 (-storepass 12345678)

    1. E:\江南科友\keytoolTest>keytool -list -keystore tomcat01.keystore -v
    2. 输入密钥库口令:
    3. 密钥库类型: jks
    4. 密钥库提供方: SUN
    5. 您的密钥库包含 1 个条目
    6. 别名: tomcat02
    7. 创建日期: 2021-3-8
    8. 条目类型: PrivateKeyEntry
    9. 证书链长度: 1
    10. 证书[1]:
    11. 所有者: CN=tomcat01, OU=JNKY, O=JNKY, L=GZ, ST=GD, C=CN
    12. 发布者: CN=tomcat01, OU=JNKY, O=JNKY, L=GZ, ST=GD, C=CN
    13. 序列号: 6979e2d4
    14. 有效期为 Mon Mar 08 17:05:36 CST 2021 Tue Mar 08 17:05:36 CST 2022
    15. 证书指纹:
    16. MD5: 4C:69:A9:22:E8:CB:48:4C:74:DD:59:DE:AF:A7:D5:91
    17. SHA1: 30:DA:94:65:67:EE:9A:7B:BD:BC:0C:E6:5A:EE:F3:68:FF:0B:B6:4C
    18. SHA256: E9:6E:BE:04:BF:FB:EF:BC:9E:AD:BD:D2:82:EE:2B:8B:60:60:EE:49:47:2B:10:CF:54:A1:B7:CC:81:11:2F:18
    19. 签名算法名称: SHA256withRSA
    20. 主体公共密钥算法: 2048 RSA 密钥
    21. 版本: 3
    22. 扩展:
    23. #1: ObjectId: 2.5.29.14 Criticality=false
    24. SubjectKeyIdentifier [
    25. KeyIdentifier [
    26. 0000: C7 46 E6 39 C7 5D 3C 3B 6F AA AB 69 D7 14 BC 20 .F.9.]<;o..i...
    27. 0010: A1 CA 0C B9 ....
    28. ]
    29. ]
    30. *******************************************
    31. *******************************************
    32. Warning:
    33. JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore tomcat01.keystore -destkeystore tomcat01.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12

    注意第 8 行 ,别名: tomcat02,已修改成功

-delete 删除条目命令

  • 查看命令用法

    1. E:\keytoolTest>keytool -delete -help
    2. keytool -delete [OPTION]...
    3. 删除条目
    4. 选项:
    5. -alias <alias> 要处理的条目的别名
    6. -keystore <keystore> 密钥库名称
    7. -storepass <arg> 密钥库口令
    8. -storetype <storetype> 密钥库类型
    9. -providername <providername> 提供方名称
    10. -providerclass <providerclass> 提供方类名
    11. -providerarg <arg> 提供方参数
    12. -providerpath <pathlist> 提供方类路径
    13. -v 详细输出
    14. -protected 通过受保护的机制的口令
    15. 使用 "keytool -help" 获取所有可用命令
  • 将别名 -alias 为 tomcat02 的条目删除

    keytool -delete -alias tomcat02 -keystore tomcat01.keystore

    注意 : 这里的 输入密钥库口令 指的是上面的 12345678 (-storepass 12345678)

    1. E:\keytoolTest>keytool -delete -alias tomcat02 -keystore tomcat01.keystore
    2. 输入密钥库口令:
  • 查看是否更改成功

    keytool -list -keystore tomcat01.keystore -v ,输入密钥库口令: 指的是上面的 12345678 (-storepass 12345678)

    1. E:\keytoolTest>keytool -list -keystore tomcat01.keystore -v
    2. 输入密钥库口令:
    3. 密钥库类型: jks
    4. 密钥库提供方: SUN
    5. 您的密钥库包含 0 个条目

    注意第 6 行 ,原先只有一个条目,删除后显示 0 条目

Keytool 工具使用的更多相关文章

  1. Java Security:keytool工具使用说明

    Keytool用法说明 Keytool是一个key与cert的管理工具.使用keytool可以管理public key.private key,以及与key之相关的certificate. 1.com ...

  2. tomcat配置https–采用JDK自带的keytool工具生成证书

    转自:http://blog.csdn.net/huangxinyu_it/article/details/41693633 有关http与https的区别请看<浅谈http与https的区别( ...

  3. 使用keytool工具产生带根CA和二级CA的用户证书

    使用keytool工具产生带根CA和二级CA的用户证书 1 生成根CA 1.1 生成根CA证书   根CA实际是一张自签CA,自签CA的使用者和颁发者都是它自己.使用下面的命令生成根证书,如果没有指定 ...

  4. ssl证书与java keytool工具

    ssl协议 SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安 ...

  5. Keystore概念,Keytool工具使用

    几个概念 keystore是一个密码保护的文件,用来存储密钥和证书(也就是说,keystore中存储的有两类型entries):这个文件(默认的)位于你的home目录,也就是你登录到操作系统的用户名的 ...

  6. 使用Keytool工具生成证书Keystore和证书签名请求文件

    内容概览: keytool的几个常用的命令. 1.创建证书 2.查看证书库 3.导出证书文件 4.导入证书的信息 5.查看证书信息 6.删除密钥库中的条目 7.修改证书条目的口令 ---------- ...

  7. keytool工具生成自签名证书并且通过浏览器导入证书

    1.生成服务器证书库 keytool -genkey -alias tomcat -keypass changeit -keyalg RSA -keysize 1024 -validity 365 - ...

  8. 利用keytool工具生成数字证书

    一.制作数字证书  因测试微信小程序, 腾讯要求使用 https协议,所以需要使用证书.使用jdk工具制作数字证书流程如下: 1.查看JDK是否安装,使用命令java -version 2.切换目录至 ...

  9. 使用JDK自带的keytool工具生成证书

    一.keytool 简介 keytool 是java用于管理密钥和证书的工具,它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及 ...

随机推荐

  1. Linux-压缩/解压缩命令

    目录 Linux系统中常见的压缩包格式 gzip 压缩命令 zip 压缩命令 tar 压缩命令(归档) Linux系统中常见的压缩包格式 格式 压缩工具 .zip zip压缩工具 .gz gzip压缩 ...

  2. 设计模式(二十三)——策略模式(Arrays源码分析)

    1 编写鸭子项目,具体要求如下: 1) 有各种鸭子(比如 野鸭.北京鸭.水鸭等, 鸭子有各种行为,比如 叫.飞行等) 2) 显示鸭子的信息 2 传统方案解决鸭子问题的分析和代码实现 1) 传统的设计方 ...

  3. boomworks 1999~2009

    大众软件 PC定时执行专家 4.0 (PCTaskTimer) - 功能强大.简单易用的定时执行软件.具有功能多.体积小.消耗资源少的特点. 超级网际搜索(SuperSearch) - 免费.快速.高 ...

  4. python 3.7 安装 sklearn keras(tf.keras)

    # 1   sklearn  一般方法 网上有很多教程,不再赘述. 注意顺序是 numpy+mkl     ,然后 scipy的环境,scipy,然后 sklearn # 2 anoconda ana ...

  5. 关于HashMap遍历,为什么要用entry

    Map.entrySet() 这个方法返回的是一个Set<Map.Entry<K,V>>,Map.Entry 是Map中的一个接口,他的用途是表示一个映射项(里面有Key和Va ...

  6. WMI在渗透测试中的重要性

    0x01 什么是wmi WMI可以描述为一组管理Windows系统的方法和功能.我们可以把它当作API来与Windows系统进行相互交流.WMI在渗透测试中的价值在于它不需要下载和安装, 因为WMI是 ...

  7. 关于Google Chrome的使用小技巧!

    1 1 http://www.runoob.com/w3cnote/chrome-skip.html Chrome是Google公司开发的一个现代化的网页浏览器,作为三大浏览器之一 它搭载了被称为V8 ...

  8. Google coding Style Guide : Google 编码风格/代码风格 手册/指南

    1 1 1 https://github.com/google/styleguide Google 编码风格/代码风格 手册/指南 Style guides for Google-originated ...

  9. PWA & TWA

    PWA & TWA https://www.bilibili.com/video/av68082979/ Service Worker workbox.js https://developer ...

  10. Object to Array

    Object to Array objectToArray(obj = {}, title = `标题`){ let datas = []; if(Object.keys(obj).length) { ...