介绍
现在,为不同的内部微服务之间的通信设置 SSL 很常见。
为了设置它,需要各种步骤。
我的具体示例是我试图为 Kafka 集群设置安全通信,以便代理通过 SSL 进行通信,并且客户端在与 kafka 代理通信时也使用 SSL。
斗争
通常,我会按照一些教程步骤来获取本地工作示例。但是当它不起作用时,很难排除故障。您不知道在生成根证书或创建 keystore 和信任库时是否犯了错误,或者您的配置可能有问题。
好事是在尝试了解您在做什么之前阅读尽可能多的文档。而不仅仅是盲目地遵循一些教程步骤。
问题是一次学习一堆东西可能会让人不知所措。因为需要用到各种东西:openssl
, keytool
, Kafka
(或其他)
我试图搜索是否有任何现有工具或 keytool
可以直接用于给它 keystore 、信任库和主机名,如果您的这些文件是“兼容的”,结果将是“是/否”。
我知道有可能使用openssl s_client -connect my-host:my-port
但为了使用它,您首先需要使用您的 keystore 启动 Web 服务器。
问题
如何确保在您需要做的所有配置中,keystore.jks
和 trustore.jks
您生成的某些主机名可以正常工作吗?
因此,您可以将它们排除为有问题的,并专注于可能导致您的系统无法工作的其他事情。
更新
一些评论提出了其他方法:
openssl
从 s_server
开始并以 s_client
开头.jks
您需要使用的文件keytool
将它们转换为 .p12
Keystore explorer
或 keytool -v -list ...
检查内容server
具有 keystore.jks
)和( client
具有 truststore.jks
)最佳答案
我创建了简单的小程序来验证 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
您需要指定创建 keystore 时使用的主机(通用名称 CN)(例如 CN=localhost)127.0.0.1 my.example.host.com
进入 /etc/hosts
将 DNS 解析定向到同一台机器 关于ssl - 如何验证导入到 keystore.jks 的自签名证书是否适用于 truststore.jks?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60798084/