You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache NiFi从1.24升级到2.x后出现400 Invalid SNI错误

解决Apache NiFi从1.24升级到2.x后访问出现400 Invalid SNI错误的问题

问题概述

将Apache NiFi从1.24版本升级至2.x版本后,服务正常运行且8443端口处于监听状态,但访问网页时出现400错误,提示"Invalid SNI"(无效的SNI)。

错误信息详情

网页端错误

HTTP ERROR 400 Invalid SNI
URI: /nifi
STATUS: 400
消息: 无效的SNI
Servlet: -
原因: org.eclipse.jetty.http.BadMessageException: 400: Invalid SNI

堆栈跟踪:

org.eclipse.jetty.http.BadMessageException: 400: 无效的SNI
    在 org.eclipse.jetty.server.SecureRequestCustomizer.customize(SecureRequestCustomizer.java:266)
    在 org.eclipse.jetty.server.SecureRequestCustomizer.customize(SecureRequestCustomizer.java:207)
    在 org.eclipse.jetty.server.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1594)
    在 org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:753)
    在 org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:501)
    在 org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:461)
    在 org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421)
    在 org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390)
    在 org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277)
    在 org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produce(AdaptiveExecutionStrategy.java:193)
    在 org.eclipse.jetty.http2.HTTP2Connection.produce(HTTP2Connection.java:208)
    在 org.eclipse.jetty.http2.HTTP2Connection.onFillable(HTTP2Connection.java:155)
    在 org.eclipse.jetty.http2.HTTP2Connection$FillableCallback.succeeded(HTTP2Connection.java:450)
    在 org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
    在 org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:558)
    在 org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:379)
    在 org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:146)
    在 org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
    在 org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
    在 org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421)
    在 org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390)
    在 org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277)
    在 org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:199)
    在 org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411)
    在 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
    在 org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
    在 org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)
    在 java.base/java.lang.Thread.run(Thread.java:1583)

应用日志(app.log)

2023-11-30 09:56:46,456 WARN [NiFi Web Server-32] org.eclipse.jetty.server.HttpChannel handleException /nifi org.eclipse.jetty.http.BadMessageException: 400: 无效的SNI
2023-11-30 09:56:46,527 WARN [NiFi Web Server-36] org.eclipse.jetty.server.HttpChannel handleException /favicon.ico org.eclipse.jetty.http.BadMessageException: 400: 无效的SNI

解决方案

1. 验证SSL证书的域名配置

NiFi 2.x依赖的Jetty版本对SNI检查更为严格,需确保SSL证书包含访问所用的域名或IP:

  • 检查证书的Subject Alternative Name(SAN)字段,确认包含访问NiFi时使用的域名或IP
  • 若使用自签名证书,重新生成时添加正确的SAN信息,示例命令:
    keytool -genkeypair -alias nifi -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore nifi-keystore.p12 -validity 3650 -ext SAN=DNS:nifi.example.com,IP:192.168.1.100
    

2. 调整Jetty的SNI检查策略

修改nifi.properties配置文件,禁用强制SNI检查:

  • 添加或修改以下配置项:
    nifi.web.https.secure.request.customizer=org.eclipse.jetty.server.SecureRequestCustomizer
    nifi.web.https.secure.request.customizer.sni-host-check=false
    
  • 重启NiFi服务使配置生效

3. 使用正确的访问方式

  • 优先使用证书绑定的域名访问NiFi,避免直接使用IP(除非证书已包含该IP的SAN)
  • 测试环境下可临时在浏览器中忽略SNI错误,但生产环境不建议

4. 检查反向代理配置(如有)

若NiFi前端部署了反向代理(如Nginx、Apache),需确保代理正确传递SNI信息:

  • Nginx需添加proxy_ssl_server_name on;到proxy_pass配置块中
  • 验证代理服务器的SSL配置是否正确转发请求头

内容的提问来源于stack exchange,提问作者bentech4u

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:09:56