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

如何将内部CA证书导入Jenkins以解决SSL握手失败问题?

解决Jenkins流水线访问内部自签名HTTPS端点的PKIX错误

我遇到过好几次类似的问题,大概率是Jenkins流水线实际使用的JVM和你导入证书的JVM不是同一个,或者agent环境没同步配置。给你几个不用官方证书就能解决的方案:

1. 确认Jenkins Agent的JVM信任库

很多时候大家只给Jenkins Master的JDK导入了CA证书,但流水线是跑在Agent节点上的,Agent的JVM根本没加载这个证书。

  • 先在流水线里打印当前使用的JVM路径,确认是不是你配置的那个:
    sh 'echo $JAVA_HOME'
    
  • 然后用keytool给Agent的JVM信任库导入证书:
    keytool -importcert -file /path/to/你的根CA证书.crt -alias internal-root-ca -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -noprompt
    
  • 如果是Docker容器化的Agent,建议把CA证书打包到自定义Agent镜像里,或者在Agent启动时通过init脚本自动导入证书。

2. 在流水线中使用临时自定义信任库

如果不想修改Agent全局的cacerts,可以在流水线运行时临时创建一个包含内部CA的信任库,然后让Java程序使用这个库:

pipeline {
    agent any
    stages {
        stage('Fetch Internal JSON') {
            steps {
                script {
                    // 复制根CA证书到工作目录(或者从Jenkins凭据里拉取)
                    sh 'cp /path/to/rootCA.crt ./'
                    // 创建临时信任库
                    sh "keytool -importcert -file rootCA.crt -alias internal-ca -keystore ./my-truststore -storepass changeit -noprompt"
                    // 在Java命令或Groovy脚本中指定信任库
                    System.setProperty("javax.net.ssl.trustStore", "./my-truststore")
                    System.setProperty("javax.net.ssl.trustStorePassword", "changeit")
                    // 这里执行你的JSON请求逻辑,比如用Groovy的HTTPBuilder
                    def http = new groovyx.net.http.RESTClient("https://internal-endpoint/")
                    def response = http.get(path: '/api/data.json')
                    echo "Response: ${response.data}"
                }
            }
        }
    }
}

3. 用curl/wget跳过证书验证(仅限内部可信环境)

如果你的流水线是通过shell命令调用curl来获取JSON,可以临时跳过SSL证书验证(注意:只适合完全信任的内部环境,禁止在公开生产环境使用):

curl -k https://internal-endpoint/api/data.json > response.json

或者wget:

wget --no-check-certificate https://internal-endpoint/api/data.json

4. 确保流水线使用正确的JDK

检查Jenkins全局工具配置里的JDK,然后在流水线里明确指定使用这个导入了证书的JDK:

pipeline {
    agent any
    tools {
        jdk 'My-JDK-With-CA' // 这里填你在全局配置里给JDK起的名字
    }
    stages {
        stage('Verify JDK') {
            steps {
                sh 'echo $JAVA_HOME' // 确认路径和你导入证书的JDK一致
            }
        }
        // 后续请求步骤
    }
}

5. 重启Jenkins和Agent

导入证书后,JVM需要重启才能加载新的信任库配置。重启Jenkins Master和所有运行的Agent节点,确保新的CA证书生效。

内容的提问来源于stack exchange,提问作者Max N.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:28:58