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

JDK17/Wildfly26.1.3升级后Connection reset问题求助

问题分析与解决方案

核心诱因定位

从现象判断,问题仅触发于JDK15及以上版本,与Wildfly版本关联度极低(JDK15搭配Wildfly16也会出现),说明根源是JDK15+的安全/网络默认行为变更,而非Wildfly配置或Apache HttpClient版本本身。

针对性排查与修复步骤

  • 强制指定兼容的TLS加密套件
    JDK15起默认启用了TLS_AES_256_GCM_SHA384等新加密套件,部分老旧服务端可能不支持这类套件,导致SSL会话建立后,后续数据传输因加密协商不兼容触发连接重置。可手动指定服务端兼容的加密集合,覆盖JDK默认:

    SSLContext sslContext = SSLContexts.custom()
            .loadTrustMaterial(null, (chain, authType) -> true) // 测试用,生产需替换为可信证书校验逻辑
            .build();
    SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(
            sslContext,
            new String[]{"TLSv1.2", "TLSv1.3"},
            new String[]{"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"}, // 替换为服务端支持的套件
            SSLConnectionSocketFactory.getDefaultHostnameVerifier());
    CloseableHttpClient httpClient = HttpClients.custom()
            .setSSLSocketFactory(sslSocketFactory)
            .build();
    
  • 禁用HTTP/2自动升级
    JDK16开始,底层网络实现默认启用HTTP/2协议,部分服务端未正确支持该协议,会导致连接建立后请求发送时被重置。可强制Apache HttpClient使用HTTP/1.1:

    RequestConfig requestConfig = RequestConfig.custom()
            .setHttp11ForceUpgrade(false) // 禁用HTTP/2升级逻辑
            .setSocketTimeout(5000)
            .setConnectTimeout(5000)
            .build();
    CloseableHttpClient httpClient = HttpClients.custom()
            .setDefaultRequestConfig(requestConfig)
            .build();
    
  • 调整连接池与Keep-Alive参数
    JDK15+对TCP连接的空闲超时、存活检测逻辑做了调整,可能导致Keep-Alive连接被提前回收。可显式配置Apache HttpClient连接池参数,匹配服务端的Keep-Alive策略:

    PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
    connManager.setMaxTotal(200);
    connManager.setDefaultMaxPerRoute(20);
    connManager.setDefaultSocketConfig(SocketConfig.custom()
            .setSoKeepAlive(true)
            .setSoTimeout(10000) // 与服务端Keep-Alive超时对齐
            .build());
    CloseableHttpClient httpClient = HttpClients.custom()
            .setConnectionManager(connManager)
            .build();
    
  • 排查Elytron子系统SSL配置冲突
    Wildfly26的Elytron子系统默认SSL配置可能与应用内的Apache HttpClient配置冲突,比如加密套件、信任库不一致。可在standalone.xml中调整Elytron的ssl-context,与应用配置对齐:

    <ssl-context name="application-ssl-context" trust-manager="app-trust-manager">
        <protocols>
            <protocol name="TLSv1.2"/>
            <protocol name="TLSv1.3"/>
        </protocols>
        <cipher-suite-filter>TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256</cipher-suite-filter>
    </ssl-context>
    

验证建议

  1. 回退到JDK11确认问题消失,排除服务端本身故障;
  2. 逐步应用上述修复项,每一步验证连接状态;
  3. 开启Apache HttpClient DEBUG日志,查看SSL握手细节、TCP状态变化,定位具体失败环节:
    log4j.logger.org.apache.http=DEBUG
    log4j.logger.org.apache.http.wire=DEBUG
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:52:04