如今,设置SSL以在不同内部微服务之间进行通信是很常见的。为了进行设置,需要执行各种步骤。
我的具体示例是,我试图为Kafka群集设置安全通信,以便代理通过SSL进行通信,并且客户端在与kafka代理进行通信时也使用SSL。
通常,我将遵循一些教程步骤,只是为了在本地获得可用的示例。但是,当它不起作用时,很难进行故障排除。您不知道在生成根证书或创建密钥库和信任库时是否犯了错误,或者您的配置有问题。
好事是在尝试了解您正在做的事情之前,先阅读尽可能多的文档。而不仅仅是盲目地遵循一些教程步骤。问题在于,一次学习一堆东西可能会让人不知所措。因为您需要使用各种东西:openssl
,keytool
,Kafka
(或其他)
我尝试搜索是否有任何现有工具,或者是否可以直接使用keytool
为其提供密钥库,信任库和主机名,如果这些文件“兼容”,则结果为是/否。
我知道可以使用openssl s_client -connect my-host:my-port
但是,要使用它,您首先需要使用密钥库启动Web服务器。
如何确保您需要做的所有配置中,您生成的keystore.jks
和trustore.jks
对于某些hostname来说可以正常工作?因此,您可以将它们排除在有问题的位置上,然后专注于可能导致系统无法正常工作的其他事情。
我创建了一个简单的小程序,以针对trustore.jks验证keystore.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
NOTES:
-h
,您需要指定创建密钥库时使用的主机(通用名称CN)(例如,CN = localhost)127.0.0.1 my.example.host.com
中添加/etc/hosts
以将DNS解析定向到该同一台计算机上]]