【问题标题】:How to verify that self-signed certificate imported into keystore.jks works with truststore.jks?如何验证导入到 keystore.jks 的自签名证书是否适用于 truststore.jks?
【发布时间】:2020-03-22 10:15:43
【问题描述】:

简介

如今,为不同的内部微服务之间的通信设置 SSL 很常见。 为了设置它,需要各种步骤。

我的具体示例是我试图为 Kafka 集群设置安全通信,以便代理通过 SSL 进行通信,并且客户端在与 kafka 代理通信时也使用 SSL。

奋斗

通常,我会按照一些教程步骤来获取本地工作示例。但是当它不起作用时,很难排除故障。您不知道您在生成根证书或创建密钥库和信任库时是否出错,或者您的配置有问题。

最好在尝试了解您在做什么之前阅读尽可能多的文档。而不仅仅是盲目地遵循一些教程步骤。 问题是一次学习一堆东西可能会让人不知所措。因为您需要使用各种东西:opensslkeytoolKafka (或其他任何东西)

我尝试搜索是否有任何现有工具,或者是否可以直接使用keytool 为其提供密钥库、信任库和主机名,如果您的这些文件“兼容”,则结果将为是/否。

我知道有可能使用 openssl s_client -connect my-host:my-port 但为了使用它,您首先需要使用您的密钥库启动 Web 服务器。

问题

如何确保在您需要做的所有配置中,您生成的keystore.jkstrustore.jks 将适用于您的某些主机名? 因此,您可以将它们排除为有问题的,并专注于可能导致您的系统无法正常工作的其他事情。


更新

一些 cmets 建议使用其他方法:

  • 使用openssls_server 开头并以s_client 开头
    • 优点:可能更可靠、更好的调试输出
    • 缺点:如果您只有.jks 文件,则需要使用keytool 将它们转换为.p12
  • 使用Keystore explorerkeytool -v -list ...检查内容
    • 这是手动工作,尚不清楚需要匹配哪些值才能保证在(server 拥有keystore.jks)和(client 拥有truststore.jks)之间实际进行通信

【问题讨论】:

  • openssl 也可用于启动服务器(通过s_server openssl.org/docs/man1.1.1/man1/s_server.html),该服务器将为您的证书提供服务。结合其调试功能,它是完成这项工作的最佳工具。
  • 那么,接下来需要做什么来进行验证:1)keystore.jks 转换为keystore.p122)truststore.jks 转换为truststore.p123)s_server 开始openssl 给定keystore.p124)s_client 给定truststore.p12 开始openssl 以连接在3) 开始的服务器上?
  • 如果您没有使用openssl 来生成您的证书,并将它们以 Java 格式 (.jks) 保存,那么可以。

标签: ssl apache-kafka openssl keytool


【解决方案1】:

我创建了一个简单的小程序来验证 keystore.jks 与 trustore.jks。 这是一个简单的 java 程序,它会打开 ssl 套接字,然后运行客户端尝试连接到这个套接字并交换一些数据。

这是我创建的gist 来分享它。

你可以简单地编译它:

javac KeyTest.java

运行它:

java KeyTest \
   -k path-to-keystore.jks -kp keystore-password \
   -t path-to-truststore.jks -tp truststore-password \
   -h localhost -p 443

注意事项

  • 对于-h,您需要指定您在创建密钥库时使用的主机(通用名称 CN)(例如 CN=localhost)
  • 您需要在此主机上运行它,因为客户端会尝试连接到它,另一种方法是在其他地方运行它,但您可以将 127.0.0.1 my.example.host.com 添加到 /etc/hosts 以将 DNS 解析定向到同一台机器

【讨论】:

  • 就个人而言,我使用密钥库浏览器
  • 几天前我还安装了密钥库资源管理器,但我无法弄清楚在打开密钥库和信任库时需要检查什么。用眼睛手动比较签名和密钥有点困难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-01
  • 2012-09-08
  • 2021-01-09
  • 2021-12-28
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多