You need to enable JavaScript to run this app. 运行Groovy脚本访问HTTPS地址时如何禁用SSL验证?
优惠活动
大模型
产品
解决方案
定价
更多

运行Groovy脚本访问HTTPS地址时如何禁用SSL验证?

本地Groovy脚本关闭SSL验证解决方案

注意事项

  • 以下方案仅适用于本地测试环境,生产环境严禁关闭SSL验证,会带来严重的安全风险
  • 生产环境建议将目标站点的SSL证书导入JDK信任库解决该问题

问题报错信息

触发报错的代码行:

def post = new URL("https://abc.deg.com").openConnection();

完整报错日志:

Caught: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at java_net_URLConnection$getOutputStream$1.call(Unknown Source)
    at url.processRequest(url.groovy:8)
    at url$processRequest.callCurrent(Unknown Source)
    at url.run(url.groovy:17)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    ... 7 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    ... 7 more

解决方案1:全局关闭SSL验证(整个脚本生效)

在网络请求代码前插入以下配置代码,原有请求逻辑无需修改即可直接运行:

import javax.net.ssl.HttpsURLConnection
import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager
import java.security.cert.X509Certificate

// 定义信任所有证书的信任管理器
def trustAllCerts = [
    getAcceptedIssuers: { null },
    checkClientTrusted: { X509Certificate[] certs, String authType -> },
    checkServerTrusted: { X509Certificate[] certs, String authType -> }
] as X509TrustManager

// 初始化SSL上下文
def sslContext = SSLContext.getInstance("TLS")
sslContext.init(null, [trustAllCerts] as TrustManager[], new java.security.SecureRandom())
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory())

// 关闭全局主机名验证
HttpsURLConnection.setDefaultHostnameVerifier({ hostname, session -> true })

解决方案2:仅针对单个请求关闭验证(更安全,不影响其他请求)

修改原有请求代码,仅对当前目标连接单独配置忽略SSL验证:

import javax.net.ssl.HttpsURLConnection
import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager
import java.security.cert.X509Certificate

def url = new URL("https://abc.deg.com")
def connection = url.openConnection() as HttpsURLConnection

// 定义信任所有证书的信任管理器
def trustAllCerts = [
    getAcceptedIssuers: { null },
    checkClientTrusted: { X509Certificate[] certs, String authType -> },
    checkServerTrusted: { X509Certificate[] certs, String authType -> }
] as X509TrustManager

def sslContext = SSLContext.getInstance("TLS")
sslContext.init(null, [trustAllCerts] as TrustManager[], new java.security.SecureRandom())
connection.setSSLSocketFactory(sslContext.getSocketFactory())

// 仅关闭当前连接的主机名验证
connection.setHostnameVerifier({ hostname, session -> true })

// 后续原有请求逻辑不变,比如设置请求方法、写入参数、获取响应等
connection.setRequestMethod("POST")
// ...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 11:00:11