ベンチマークのエラーメッセージと対策

これは、Gatling Keycloak ベンチマーク実行時の一般的なエラーメッセージとその対策について説明しています。

ベンチマークが SSLHandshakeException というメッセージで失敗する場合

背景

このエラーメッセージは、Keycloak の前に TLS リバースプロキシを使用した場合に表示されました (issue keycloak/keycloak-benchmark#191 を参照)。

原因

特定の設定では、リバースプロキシはホスト名 localhost で実行されていました。Java は、ホスト名にドットが含まれている場合にのみサーバー名表示 (SNI) を送信します。 Gamlor のブログ記事「Missing SNI with Java’s HTTPS client」を参照してください。そして、リバースプロキシはその SNI に依存していました。

さらなる分析

  • openssl s_client -connect localhost:443 は接続しましたが、SNI が送信されないため、すぐに接続を切断しました。

  • openssl s_client -connect localhost:8443 -servername localhost は、SNI がリバースプロキシのコマンドラインのホスト名と一致するため、期待どおりに接続されました。

対策
  • localhost を使用する代わりに、ロードテストのターゲットとして localhost.localdomain を使用し、TLS リバースプロキシで設定されたホストを使用してください。

  • または、IP アドレス 127.0.0.1 にマップされるカスタムホスト名を hosts ファイルで使用し、ロードテストと TLS リバースプロキシ用にこれを設定します。