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

Play 2.4.x测试环境SSL验证忽略无效,求其他有效配置方案

Play 2.4.x 测试环境忽略SSL验证的解决方案

你遇到的错误:

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

除了你已尝试的配置,可通过以下方式解决:

  • 修正配置层级并补充信任管理器算法配置
    Play 2.4.x的WS配置需在play.ws层级下,替换原有配置为:

    play.ws.ssl.trustManager.algorithm=PKIX
    play.ws.ssl.loose.acceptAnyCertificate=true
    play.ws.ssl.loose.disableHostnameVerification=true
    

    旧版本的根级ws.acceptAnyCertificate=true可能不生效,需使用play.ws.ssl.loose下的对应配置。

  • 在测试代码中自定义不安全的WS客户端
    直接通过代码创建忽略所有SSL验证的WS客户端,绕过配置限制:

    import play.libs.ws.WSClient;
    import play.libs.ws.WSConfigParser;
    import play.libs.ws.ning.NingWSClient;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    import java.security.cert.X509Certificate;
    
    public WSClient createInsecureWSClient() throws Exception {
        // 信任所有证书的TrustManager
        TrustManager[] trustAllCerts = new TrustManager[]{
            new X509TrustManager() {
                @Override
                public X509Certificate[] getAcceptedIssuers() { return null; }
                @Override
                public void checkClientTrusted(X509Certificate[] certs, String authType) {}
                @Override
                public void checkServerTrusted(X509Certificate[] certs, String authType) {}
            }
        };
    
        // 初始化SSL上下文
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
    
        // 构建自定义WS客户端配置
        WSConfigParser configParser = new WSConfigParser(play.api.Play.current().configuration());
        com.ning.http.client.AsyncHttpClientConfig.Builder clientConfig = configParser.parse();
        clientConfig.setSSLContext(sslContext);
        clientConfig.setHostnameVerifier((host, session) -> true); // 忽略主机名校验
    
        return new NingWSClient(clientConfig.build());
    }
    

    测试时使用该客户端发起请求即可。

  • 验证测试环境配置加载情况
    确保测试代码正确加载了test环境的application.conf,可添加打印代码确认配置是否生效:

    import play.Configuration;
    
    // 在测试初始化时打印配置
    System.out.println("SSL宽松配置状态: " + Configuration.root().getString("play.ws.ssl.loose.acceptAnyCertificate"));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:40:29