基准测试错误消息和解决方法

这描述了运行 Gatling Keycloak 基准测试时常见的错误消息及其解决方法。

基准测试失败,并显示消息 SSLHandshakeException

上下文

此错误消息出现在 Keycloak 前面使用 TLS 反向代理时(见 issue keycloak/keycloak-benchmark#191)。

原因

在特定设置中,反向代理在主机名 localhost 上运行。Java 仅在主机名包含句点时才会发送服务器名称指示 (SNI),参见 Gamlor 的博文“Java 的 HTTPS 客户端缺少 SNI”,而反向代理依赖于 SNI。

进一步分析

  • openssl s_client -connect localhost:443 连接然后立即断开连接,因为没有发送 SNI。

  • openssl s_client -connect localhost:8443 -servername localhost 按预期连接,因为 SNI 与反向代理命令行中的主机名匹配。

补救措施
  • 不要使用 localhost,而是使用 localhost.localdomain 作为负载测试的目标以及 TLS 反向代理中配置的主机。

  • 或者,或者在 hosts 文件中使用自定义主机名,该主机名映射到 IP 地址 127.0.0.1,并将此配置用于丢失测试和 TLS 反向代理。