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

Java项目中如何禁用SSL证书校验?解决PKIX路径构建失败错误

解决PKIX证书校验失败问题(Java 17 + Maven + STS 4)

1. 确认STS的JVM参数生效(分全局和项目级)

STS的全局JVM参数与项目运行参数是分离的,需分别配置:

  • 全局JRE参数:打开STS,依次点击Window > Preferences > Java > Installed JREs,选中Java 17后点击Edit,在Default VM arguments中添加完整跳过校验的参数(适配Java 17的协议限制):
    -Dcom.sun.net.ssl.checkRevocation=false -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true -Djdk.tls.client.protocols=TLSv1.2 -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStore=NUL
    
  • 项目运行参数:右键目标项目,选择Run As > Run Configurations > Java Application,在Arguments标签的VM arguments中粘贴上述参数。

2. Maven配置层面跳过SSL校验

若错误出现在Maven拉取依赖或执行插件阶段,需修改Maven的settings.xml(路径为~/.m2/settings.xml或STS中Window > Preferences > Maven > User Settings指定的文件):

<settings>
  <mirrors>
    <!-- 针对目标远程API仓库配置镜像 -->
    <mirror>
      <id>insecure-repo</id>
      <mirrorOf>your-target-repo-id</mirrorOf>
      <url>https://your-remote-api-url</url>
    </mirror>
  </mirrors>
  <profiles>
    <profile>
      <id>insecure-ssl</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <maven.wagon.http.ssl.insecure>true</maven.wagon.http.ssl.insecure>
        <maven.wagon.http.ssl.allowall>true</maven.wagon.http.ssl.allowall>
        <maven.wagon.http.ssl.ignore.validity.dates>true</maven.wagon.http.ssl.ignore.validity.dates>
      </properties>
    </profile>
  </profiles>
  <servers>
    <server>
      <id>your-target-repo-id</id>
      <configuration>
        <ssl>
          <insecure>true</insecure>
          <allowAll>true</allowAll>
          <ignoreValidityDates>true</ignoreValidityDates>
        </ssl>
      </configuration>
    </server>
  </servers>
</settings>

3. 代码层面强制跳过SSL校验(仅测试环境可用)

若为自定义Java代码调用API时出错,可通过代码禁用证书校验(生产环境绝对禁止使用):

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

public class SSLUtils {
    public static void disableSSLVerification() {
        try {
            // 信任所有证书的TrustManager
            TrustManager[] trustAllCerts = new TrustManager[]{
                new X509TrustManager() {
                    public X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }
                    public void checkClientTrusted(X509Certificate[] certs, String authType) {}
                    public void checkServerTrusted(X509Certificate[] certs, String authType) {}
                }
            };

            // 初始化SSL上下文
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

            // 禁用主机名校验
            HostnameVerifier allHostsValid = (hostname, session) -> true;
            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在调用远程API前执行SSLUtils.disableSSLVerification();即可。

4. Java 17特殊注意事项

Java 17默认禁用了部分旧TLS协议与不安全算法,需确保:

  • 添加-Djdk.tls.client.protocols=TLSv1.2(若远程API使用TLS 1.3则改为TLSv1.3)
  • 优先使用javax.net.ssl包下的类,避免com.sun.net.ssl等已废弃的API

内容的提问来源于stack exchange,提问作者Alejandro Pacheco Tejeda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:37:41