【发布时间】:2021-08-22 04:01:09
【问题描述】:
我正在尝试设置 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 命令从客户端证书中提取公共证书
keytool -export -file cert -keystore certificate.p12 -alias "12345" -storetype pkcs12 -storepass xxxxx
- 将证书导入代理信任库。代理信任库仅包含客户端 12345 证书。
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
- 在客户端配置了信任库。客户端信任库包含 CA 证书。
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 颁发的证书的客户端进行身份验证。
可能是什么问题?
【问题讨论】:
标签: ssl apache-kafka ssl-certificate tls1.2