
maven 3.9+ 默认启用基于 java 的安全 https 传输(aether.connector.https.securitymode=secure),导致无法验证 maven 中央仓库证书时抛出 pkix path building failed 错误;本文提供安全、兼容且可复用的修复方法。
该错误本质是 Maven 客户端在尝试通过 HTTPS 访问 https://www.php.cn/link/75f5a325280e4f8d8402d0300e9da4f7 时,无法构建有效的 TLS 证书信任链(PKIX path building failed),常见于企业代理、本地网络中间设备(如防火墙、SSL 解密网关)或 JDK 信任库缺失/过期证书场景。
虽然手动导入证书到 cacerts 是传统做法,但自 Maven 3.9 起,其默认传输层已切换为更严格的 native HTTP connector(基于 JDK 的 HttpsURLConnection),不再完全依赖系统级 cacerts,而是额外执行 RFC 5280 合规性校验。因此,仅导入证书往往无效。
✅ 推荐解决方案:临时禁用传输层 SSL 验证(开发/测试环境适用)
使用 Maven 属性覆盖安全模式,跳过证书链验证:
mvn compile -Daether.connector.https.securityMode=insecure
该参数明确告知 Maven 使用非严格安全模式,适用于以下场景:
- 本地开发调试(非生产)
- 受控内网环境(如公司代理强制 SSL 拦截)
- 快速验证是否为证书问题(诊断用途)
⚠️ 注意事项:
- 不建议在 CI/CD 或生产构建中长期启用 insecure 模式,会削弱传输安全性;
- 若需长期解决,应优先修复根本原因:更新 JDK 的 cacerts(keytool -importcert 导入权威 CA 或中间证书),或配置企业代理的可信根证书;
- 对于 Maven 全局生效,可将该属性添加至 ~/.m2/settings.xml 的
中(但需谨慎评估安全影响); - 确保使用的是 Maven 3.9+(可通过 mvn -v 验证),旧版本不支持该参数。
? 补充验证方式:
运行以下命令确认是否为传输层问题:
mvn dependency:resolve -Dartifact=org.junit:junit-bom:pom:5.6.2 -X 2>&1 | grep -i "securitymode\|https"
输出中若出现 securityMode=secure 且紧随 ValidatorException,即确认为此机制触发。
总结:-Daether.connector.https.securityMode=insecure 是 Maven 3.9+ 下应对 PKIX 证书路径失败最直接、低侵入的临时方案;但真正健壮的工程实践,仍应回归证书信任体系治理——定期同步 JDK CA 仓库、统一管理企业根证书、避免中间设备无差别 SSL 解密。










