我正在尝试设置 2 路 ssl 身份验证。我的要求是经纪人应仅对特定客户进行身份验证。
我的组织有一个 CA,它以 pkcs12 格式颁发所有证书。我遵循的步骤如下。
ssl.keystore.location=/home/kafka/certificate.p12
ssl.keystore.password=xxxxx
ssl.client.auth=required
ssl.keystore.location=/home/kafka/certificate.p12
ssl.keystore.password=xxxxx
keytool -export -file cert -keystore certificate.p12 -alias "12345" -storetype pkcs12 -storepass xxxxx
keytool -keystore truststore.p12 -import -file cert -alias 12345 -storetype pkcs12 -storepass xxxxx -noprompt
ssl.truststore.location=/home/kafka/truststore.p12
ssl.truststore.password=xxxxx
ssl.truststore.location=/etc/pki/java/cacerts
ssl.truststore.password=xxxxx
当我运行代理和客户端时,我希望代理对客户端进行身份验证并建立 ssl 连接。而是抛出以下错误。
[2021-06-03 23:32:06,864] ERROR [AdminClient clientId=adminclient-1] Connection to node -1 (abc.com/10.129.140.212:9093) failed authentication due to: SSL handshake failed (org.apache.kafka.clients.NetworkClient)
[2021-06-03 23:32:06,866] WARN [AdminClient clientId=adminclient-1] Metadata update failed due to authentication error (org.apache.kafka.clients.admin.internals.AdminMetadataManager)
org.apache.kafka.common.errors.SslAuthenticationException: SSL handshake failed
Caused by: javax.net.ssl.SSLProtocolException: Unexpected handshake message: server_hello
我尝试了各种方法,但似乎没有任何效果。当我用只包含 CA 证书的 /etc/pki/java/cacerts 信任库文件替换代理信任库时 然后它工作正常。但它会验证任何拥有 CA 颁发的证书的客户端。
可能是什么问题?
答案 0 :(得分:0)
默认格式为jks,
使用 keytool 创建一个带有证书和密钥的 Java KeyStore (JKS),供 Kafka 使用。系统将提示您为生成的文件创建新密码,并输入上一步中 PKCS12 文件的密码。保留新的 JKS 密码以在下面的配置中使用。
$ keytool -importkeystore -srckeystore server.p12 -destkeystore kafka.server.keystore.jks -srcstoretype pkcs12 -alias myserver.internal.net
注意:忽略来自 keytool 的以下警告是安全的。
JKS 密钥库使用专有格式。建议使用“keytool -importkeystore -srckeystore server.p12 -destkeystore kafka.server.keystore.jks -srcstoretype pkcs12”迁移到行业标准格式PKCS12