
本文介绍如何解决 maven 3.9+ 因启用默认 native https 传输层而导致的 pkix 证书路径验证失败问题(如 `pkix path building failed`),提供安全、临时和长期三种应对策略。
从 Maven 3.9.0 版本开始,Apache Maven 将默认的 HTTP 传输实现由 httpclient 切换为 native(基于 JDK 内置 java.net.http.HttpClient)。该变更提升了性能与兼容性,但也带来了更严格的 TLS/SSL 验证行为——尤其在企业环境(如使用代理、中间人证书、自定义 CA 或 JDK 信任库未同步更新)下,容易触发如下典型错误:
Non-resolvable import POM: Could not transfer artifact org.junit:junit-bom:pom:5.6.2 from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
该错误本质是 JDK 无法通过内置信任库(cacerts)构建到 repo.maven.apache.org 的可信证书链,而非 Maven 本身配置错误。
✅ 推荐解决方案(按优先级排序)
1️⃣ 【推荐】临时绕过验证(仅开发/调试用)
适用于快速验证是否为 SSL 问题本身,切勿用于 CI/CD 或生产环境:
mvn compile -Daether.connector.https.securityMode=insecure
此参数强制 aether(Maven 依赖解析引擎)跳过 HTTPS 证书校验。你也可将其设为全局环境变量以避免每次输入:
# Linux/macOS export MAVEN_OPTS="-Daether.connector.https.securityMode=insecure" # Windows(CMD) set MAVEN_OPTS=-Daether.connector.https.securityMode=insecure # Windows(PowerShell) $env:MAVEN_OPTS="-Daether.connector.https.securityMode=insecure"
⚠️ 注意:insecure 模式会禁用整个 HTTPS 证书链验证(包括域名匹配、有效期、签名有效性等),存在中间人攻击风险,请严格限制使用场景。
2️⃣ 【最佳实践】更新 JDK 信任库(长期可靠)
根本性解决方式是确保 JDK 的 cacerts 信任库包含权威 CA 根证书(如 DigiCert、Sectigo 等),特别是当你的网络环境使用了企业代理或 SSL 解密网关时:
- 下载最新根证书包(如 Mozilla CA Certificate Store 的 cacert.pem);
- 使用 keytool 导入关键根证书(示例导入 Let's Encrypt R3):
# 下载 https://letsencrypt.org/certs/lets-encrypt-r3.pem keytool -importcert -alias letsencrypt-r3 -file lets-encrypt-r3.pem \ -keystore "$JAVA_HOME/jre/lib/security/cacerts" -storepass changeit
? 提示:确认 $JAVA_HOME 指向 Maven 实际使用的 JDK(可通过 mvn -version 查看),并注意 cacerts 路径在 JDK 17+ 中可能为 $JAVA_HOME/lib/security/cacerts。
3️⃣ 【可选】降级传输实现(兼容旧行为)
若需恢复 Maven 3.8.x 的 httpclient 行为(例如已适配其代理/认证逻辑),可在 ~/.m2/settings.xml 中显式指定:
httpclient
随后仍需确保 httpclient 相关依赖(如 org.apache.httpcomponents:httpclient)版本兼容,且代理配置正确。
? 总结与建议
- PKIX path building failed 是典型的 TLS 信任链断裂现象,根源在于 JDK 信任库缺失必要根证书;
- -Daether.connector.https.securityMode=insecure 是最快速的诊断手段,但仅为临时方案;
- 生产环境应优先通过更新 cacerts 或配置企业 CA 证书来修复信任链;
- 避免修改 Maven 安装目录下的 conf/settings.xml 全局配置,推荐使用用户级 ~/.m2/settings.xml 进行个性化设置;
- 若使用 IDE(如 IntelliJ IDEA),还需检查其内嵌 Maven 是否指向同一 JDK,并同步更新其信任库。
通过以上任一方式,即可稳定解决 Maven 3.9+ 构建中因 HTTPS 传输升级引发的证书验证失败问题。










