理解 Java 的 keytool 工具,如何使用 .crt 文件,解决证书相关问题


Java 的 keytool 工具可以用于 https 连接,能够只允许经过授权的客户访问。任意工具或者 Java 代码都可以使用一个安装好的证书来访问服务器。

Java keytool 是如何工作的

也许你想让你的服务器可以公开访问,但仅限于特定的团队或组织。
或者你为企业构建了一个基础设施并希望它是安全的。在这种情况下你就需要一些手段来控制谁可以使用特定的服务了。
诸如此类的资源应该保护起来以免受未经授权的使用,服务器和授权用户之间的通道必须是安全的。
Java keytool 允许我们给指定的 Java 客户端颁发证书以使其能够通过 https 来使用特定的服务器。这是一个完善的并易于使用的 Java 标准。
要获得使用特定服务的认证,客户端需要完成以下操作:
拿到服务端所期望的证书 (.crt 文件)。你可以向管理员要一下这个证书。

  • 将其添加到你的秘钥环:
keytool -import
  • 检查自定义的客户端工具的详细配置,如果有的话。

添加证书到 keystore

假定:

  • my.cert.location/my.cert.crt - 要安装的证书
  • “changeit” - 默认的 keystore 密码 (如果你没有设置过的话,java 给出的默认值就是这个)
  • 默认的 java keystore 位置 - $JAVA_HOME/jre/lib/security/cacerts
    将该证书添加到默认的 java 密钥环
keytool -import -file my.cert.location/my.cert.crt -storepass changeit -keystore $JAVA_HOME/jre/lib/security/cacerts -alias mycert1

要确认时回答 ‘yes’

列出 keystore 中的证书

列出 keystore 中的证书:

keytool -list -storepass changeit -keystore /opt/java/jre/lib/security/cacerts

输出类似于以下:

mycert1, May 10, 2010, trustedCertEntry,Certificate fingerprint (MD5): CA:3D:D3:68:F1:03:5C:D0:32:FA:B8:2B:59:E8:5A:DB verisigntsaca, Aug 13, 2008, trustedCertEntry,Certificate fingerprint (MD5): 7F:66:7A:71:D3:EB:69:78:20:9A:51:14:9D:83:DA:20 baltimorecodesigningca, May 10, 2002, trustedCertEntry,Certificate fingerprint (MD5): 90:F5:28:49:56:D1:5D:2C:B0:53:D4:4B:EF:6F:90:22
其中比较重要的部分为证书的别名 **alias**。你可以使用别名 **alias** 对证书进行导入和导出操作。

在 keystore 中,证书的唯一标识或者名字被称为别名 alias

要确认别名 alias 为 mykeylis 的证书是否已导入,使用:

keytool -list -storepass changeit -keystore /opt/java/jre/lib/security/cacerts |grep mykey1 -A1

以上命令将列出该证书所有的相关信息。
如果服务器没有找到该证书的话会给出以下信息:

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
给出一台正常连接的客户端和一台无法连接到服务器的客户端,你可以通过以下方法去排查问题:
  • 对比各自证书的 MD5
  • 检查证书是否已安装
  • 导入缺失的证书
  • 打印证书内容

从 keystore 导出证书

keytool -exportcert -storepass changeit -keystore $JAVA_HOME/jre/lib/security/cacerts -alias mycert1 > my.cert.location/my.cert.1.crt

my.cert.1.crt 将被导重新导入到另一个秘钥环。

查看证书的更多信息

备注:示例使用上文已导出的同一个证书。

查看该证书的所有者、组织等信息可以使用以下命令:

keytool -printcert -file mycert.crt

将该证书从 keystore 移除

keytool -delete -storepass changeit -keystore $JAVA_HOME/jre/lib/security/cacerts -alias mycert1

非交互模式 (keytool 命令不询问)

这在 bash 脚本中很有用。使用 -noprompt 选项:

keytool -delete -storepass changeit -keystore $JAVA_HOME/jre/lib/security/cacerts -alias mycert1 -noprompt

原文链接:Understanding java keytool, working with .crt files, fixing certificate problems

回答: keytoolJava开发工具包中的一个命令行工具,用于管理Java密钥库和证书。它可以用来解析.crt文件,但是.crt文件本身只包含证书,不包含私钥。如果你只有一个.crt文件,没有密钥密码或其他信息,那么你无法使用keytool来解析它。通常,使用keytool来解析.crt文件需要同时拥有相应的私钥和密钥库文件。如果你只有.crt文件,你可能需要使用其他工具或方法来解析它。 #### 引用[.reference_title] - *1* [https加密解密过程二、名词解析及文件生成](https://blog.csdn.net/qq13933506749/article/details/128116035)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [java 携带.crt证书 发送https请求](https://blog.csdn.net/weixin_40816738/article/details/128328087)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [keytool命令详解 自签名证书](https://blog.csdn.net/u011077027/article/details/100731436)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值