KafkaサーバーでSSL認証を有効にしようとしています。以下のドキュメント(リンク)の7.2セクションに従っています。
http://kafka.Apache.org/documentation.html#security_ssl
すべての手順に従いましたが、プロデューサー.batファイルを呼び出してトピックにデータを送信しているときにエラーが発生しました。
[〜#〜] error [〜#〜][Producer clientId = console-producer]ノード-1への接続が失敗したため、SSLハンドシェイクに失敗しました(org.Apache.kafka.clients.NetworkClient)
原因:Java.security.cert.CertificateException:localhostに一致する名前が見つかりません
CN=localhost
で証明書を作成しました。
クライアントでssl.endpoint.identification.algorithmを空の文字列に設定すると、サーバーのホスト名検証が無効になる場合があります
一般的にJava.security.cert.CertificateException:localhostに一致する名前が見つかりませんは、証明書のホスト名がサーバーのホスト名と一致しないことを意味します。
次のスレッド にこのエラーの素晴らしい説明があります。
次のエラーが発生しました。これは、Kafkaのバージョンを1.xから2.xにアップグレードしたことが原因である可能性があります。
javax.net.ssl.SSLHandshakeException:SSLEngineの一般的な問題... javax.net.ssl.SSLHandshakeException:SSLEngineの一般的な問題... Java.security.cert.CertificateException:***に一致する名前が見つかりません
または
[プロデューサーclientId = producer-1]ノード-2への接続が次の理由で認証に失敗しました:SSLハンドシェイクが失敗しました
Ssl.endpoint.identification.algorithmのデフォルト値がhttpsに変更されました。これにより、ホスト名検証が実行されます(それ以外の場合、中間者攻撃が可能です)。以前の動作を復元するには、ssl.endpoint.identification.algorithmを空の文字列に設定します。 Apache Kafka 2.0.0の注目すべき変更点
ソリューション:SslConfigs.SSL_ENDPOINT_IDENTIFICATION_ALGORITHM_CONFIG、 ""
ssl.endpoint.identification.algorithm =と設定するだけです。