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

RestAssured测试遇SSL握手失败,如何禁用SSL验证?

问题

在无SSL证书的环境中运行RestAssured自动化测试时,首次调用抛出如下异常:

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

at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:371)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:314)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:309)

已尝试两种配置修改,但均未解决问题:

第一种配置:

public static void addHeadersToRequestsSpecifications(Map<String, String> authHeaders, String cookieValue) {
    API.addRequestSpec(new RequestSpecBuilder()
            .setConfig(RestAssuredConfig.newConfig().sslConfig(new SSLConfig().relaxedHTTPSValidation()))
            .addHeader("cookie", cookieValue)
            .addHeader("Accept", "application/json, text/plain, */*")
            .addHeader(TOKEN, authHeaders.get(this.token))
            .addFilter(new AllureRestAssured())
            .build());
}

第二种配置:

public static void addHeadersToRequestsSpecifications(Map<String, String> authHeaders, String cookieValue) {
    API.addRequestSpec(new RequestSpecBuilder()
            .setConfig(RestAssured.config().sslConfig(new SSLConfig().allowAllHostnames()))
            .addHeader("cookie", cookieValue)
            .addHeader("Accept", "application/json, text/plain, */*")
            .addHeader(TOKEN, authHeaders.get(this.token))
            .addFilter(new AllureRestAssured())
            .build());
}

环境信息:Java 17.0.4,RestAssured 5.1.1

请问如何禁用SSL验证?


解决方法

1. 全局配置放松SSL验证

在测试初始化阶段执行一次全局配置,让所有请求自动跳过SSL证书验证:

// 全局启用放松HTTPS验证
RestAssured.useRelaxedHTTPSValidation();

或指定协议版本(适配Java 17的默认协议限制):

RestAssured.config = RestAssured.config()
        .sslConfig(new SSLConfig().relaxedHTTPSValidation("TLS"));

2. 确保RequestSpec被正确应用

检查自定义API.addRequestSpec方法是否将配置绑定到了实际请求中。如果是单请求场景,可直接在请求内指定SSL配置:

given()
    .config(RestAssuredConfig.newConfig().sslConfig(new SSLConfig().relaxedHTTPSValidation()))
    .header("cookie", cookieValue)
    .header("Accept", "application/json, text/plain, */*")
    .header(TOKEN, authHeaders.get(TOKEN))
    .filter(new AllureRestAssured())
.when()
    .get("/target-endpoint");

3. Java 17专属JVM参数调整

Java 17对SSL校验更严格,可添加以下JVM启动参数放宽限制:

-Djdk.tls.client.protocols=TLSv1.2,TLSv1.3
-Djavax.net.ssl.trustStoreType=JKS
-Djavax.net.ssl.trustStore=/path/to/empty-truststore.jks

若不想创建空信任库,可临时使用以下参数强制忽略证书校验(仅测试环境用):

-Dsun.security.ssl.allowUnsafeRenegotiation=true
-Dcom.sun.net.ssl.checkRevocation=false

4. 自定义信任所有证书的SSL上下文

如果上述方法无效,手动构建信任所有证书的SSL上下文并配置给RestAssured:

import org.apache.http.ssl.SSLContexts;

// 构建信任所有证书的SSL上下文
SSLContext sslContext = SSLContexts.custom()
        .loadTrustMaterial((chain, authType) -> true)
        .build();

// 配置RestAssured使用该上下文
RestAssured.config = RestAssured.config()
        .sslConfig(new SSLConfig().sslContext(sslContext).allowAllHostnames());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:33:39