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

GitLab CI中Gradle构建绕过SSL验证求助

解决Gradle构建时跳过SSL验证以访问内部Nexus仓库的问题

问题场景

在GitLab CI流水线中执行build.gradle构建时,因无法使用SSL证书,需跳过SSL验证来访问内部Nexus仓库下载依赖,遇到以下错误:

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

已尝试但无效的方案

  • 创建gradle.properties文件并添加以下系统属性配置:
    systemProp.http.ssl.insecure=true
    systemProp.http.ssl.allowall=true
    systemProp.http.ssl.ignore.validity.dates=true
    
  • 使用gradle-trust-all插件(参考相关Stack Overflow问题)

可行解决方案

方案1:在build.gradle中嵌入代码全局禁用SSL验证

在项目根目录的build.gradle最顶部添加以下Groovy代码,通过修改JVM的SSL上下文实现跳过所有证书验证:

import javax.net.ssl.*
import java.security.cert.X509Certificate

// 信任所有证书的TrustManager实现
class TrustAllManager implements X509TrustManager {
    public void checkClientTrusted(X509Certificate[] chain, String authType) {}
    public void checkServerTrusted(X509Certificate[] chain, String authType) {}
    public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }
}

// 禁用主机名验证的实现
HostnameVerifier trustAllHostnames = new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) { return true; }
};

// 应用全局SSL配置
SSLContext sslContext = SSLContext.getInstance("TLS")
sslContext.init(null, [new TrustAllManager()] as TrustManager[], new java.security.SecureRandom())
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory())
HttpsURLConnection.setDefaultHostnameVerifier(trustAllHostnames)

方案2:在GitLab CI配置中传递JVM参数

如果不想修改build.gradle,可以在.gitlab-ci.yml的构建命令中直接添加JVM系统属性,确保Gradle启动时加载配置:

build:
  stage: build
  script:
    - ./gradlew build -Dhttp.ssl.insecure=true -Dhttp.ssl.allowall=true -Dhttp.ssl.ignore.validity.dates=true -Djavax.net.ssl.trustStore=/dev/null

注:添加-Djavax.net.ssl.trustStore=/dev/null可强制JVM不使用默认信任库,部分环境下能解决系统属性不生效的问题

方案3:针对Nexus仓库单独禁用SSL验证

如果仅需对目标Nexus仓库跳过验证,可在build.gradle的仓库配置中添加allowInsecureProtocol = true(Gradle 6.0及以上版本支持):

repositories {
    maven {
        url "https://your-internal-nexus-url/repository/maven-public/"
        allowInsecureProtocol = true // 仅对该仓库禁用SSL验证
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:23:13