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

Jenkins执行Rest Assured自动化项目时遇SSL证书路径错误求助

解决Jenkins运行GitHub API自动化测试时的SSLHandshakeException问题

嘿,这个问题我之前也碰到过!本质是Jenkins使用的JVM没有信任GitHub的SSL证书——本地Eclipse和Maven命令行能正常跑,是因为你的本地JDK已经把GitHub的证书加入了信任库,但Jenkins的JVM(大概率是单独配置的,和你本地用的不是同一个)没做这一步,导致SSL握手时验证失败。

下面给你几个可行的解决方案,按推荐程度排序:

方案1:将GitHub的SSL证书导入Jenkins的JVM信任库(推荐,安全)

这是最规范的做法,步骤很清晰:

  • 先导出GitHub的SSL证书:打开浏览器访问https://api.github.com,点击地址栏的锁形图标,找到证书详情并导出(保存成.crt格式就行)。
  • 找到Jenkins使用的JDK路径:进入Jenkins的「全局工具配置」,查看JDK的安装路径,找到其中的jre/lib/security/cacerts文件(这是JVM的默认信任库)。
  • 用Java自带的keytool命令导入证书,命令格式如下:
    keytool -importcert -alias github-api-cert -file /你保存证书的路径/github.crt -keystore /Jenkins的JDK路径/jre/lib/security/cacerts
    
    默认的cacerts密码是changeit,执行时按提示输入密码,然后输入yes确认导入即可。
  • 最后重启Jenkins服务,让信任库的更新生效。

方案2:在测试代码中临时禁用SSL验证(仅测试环境用!)

如果只是临时跑测试,不想折腾证书导入,可以用这个快捷方式,但生产环境绝对不能用,会完全跳过SSL证书验证,有安全风险:

用Rest Assured自带的配置(更简洁)

在测试类的初始化方法里加一行代码就行:

import io.restassured.RestAssured;
import org.testng.annotations.BeforeSuite;

public class BaseTest {
    @BeforeSuite
    public void setup() {
        // 禁用SSL证书验证
        RestAssured.useRelaxedHTTPSValidation();
    }
}

通用Java代码绕过SSL验证

如果需要更底层的控制,也可以用这段代码:

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.X509Certificate;
import org.testng.annotations.BeforeSuite;

public class BaseTest {
    @BeforeSuite
    public void disableSSLCheck() throws Exception {
        TrustManager[] trustAllCerts = new TrustManager[]{
            new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }
                public void checkClientTrusted(X509Certificate[] certs, String authType) {}
                public void checkServerTrusted(X509Certificate[] certs, String authType) {}
            }
        };

        SSLContext sslContext = SSLContext.getInstance("SSL");
        sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
        javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
    }
}

方案3:让Jenkins使用和本地一致的JDK

有时候Jenkins配置的JDK和你本地开发用的不是同一个,导致信任库不同。你可以进入Jenkins的「全局工具配置」,把JDK的路径改成你本地正在用的那个JDK路径,这样Jenkins就能复用本地已经信任GitHub证书的信任库了,不用额外导入证书。

额外注意

如果你是用Docker部署的Jenkins,导入证书时要注意操作的是容器内的JDK路径,或者直接把本地的cacerts文件挂载到容器对应的路径下,避免容器重启后证书丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:18:10