news 2026/9/13 12:59:15

Maven PKIX报错:证书信任链排查与cacerts修复指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Maven PKIX报错:证书信任链排查与cacerts修复指南

1. 破译报错:PKIX path building failed到底是谁在说话

先别急着百度复制粘贴解决方案,我们花两分钟把这段报错真正看懂。绝大多数Maven用户在IDEA里导入项目时看到这行红字,第一反应是“Maven崩了”“镜像挂了”“IDEA坏了”,其实这口锅既不该Maven背,也不该IDEA背,问题出在JDK自身对HTTPS证书的校验逻辑上。

完整报错一般长这样:

[ERROR] Failed to execute goal on project xxx: Could not resolve dependencies for project com.example:demo:jar:1.0.0: Failed to collect dependencies at com.fasterxml.jackson.core:jackson-databind:jar:2.15.2: Failed to read artifact descriptor for com.fasterxml.jackson.core:jackson-databind:jar:2.15.2: Could not transfer artifact com.fasterxml.jackson.core:jackson-databind:pom:2.15.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

这串报错里信息量很大,我拆开讲:

  • Could not transfer artifact:Maven尝试从远程仓库拉取依赖的pom/jar文件失败,这一步走的是HTTP或HTTPS协议。
  • from/to central (https://repo.maven.apache.org/maven2):默认中央仓库地址是HTTPS,注意,这里一定是https而不是http,如果是http就不会触发证书校验。
  • PKIX path building failed:PKIX是Public Key Infrastructure (X.509)的简称,这是JDK里CertPathValidator在构建信任链时的标准异常。通俗理解就是:JDK手里拿着一串“我信任的CA根证书”清单,当Maven访问某个HTTPS仓库时,服务器把证书链发给JDK,JDK发现“这条链的根证书不在我的清单里”,于是拒绝继续握手。
  • unable to find valid certification path to requested target:翻译成大白话就是“我找不到一条能通向目标服务器的受信任路径”。

这里的“target”指的是Maven仓库服务器,不是你的项目target目录,别搞混了。

那为什么这项校验归JDK管而不归Maven管?因为Maven本身是跑在JVM上的Java程序,它通过JDK的HttpsURLConnection或Apache HttpClient发起网络请求,底层Socket层把TLS握手完全交给JSSE(Java Secure Socket Extension)处理。也就是说,JVM信任谁,Maven就信任谁;JVM不信任谁,Maven必然报错。这跟你的操作系统浏览器里已安装的证书是两套体系,很多人浏览器访问仓库网址一切正常,但Maven就是报PKIX,原因就在这里——浏览器用的是系统证书库,JVM有自己的cacerts

所以结论先放在这里:这个报错的本质是JVM的信任库里没有仓库服务器证书链上层的CA根证书,或者仓库服务器的证书链本身不完整。

知道这一点后,后面所有排查和修复动作都有了方向,而不是瞎试。

2. 证书信任链:为什么Maven下载依赖会被“卡”在SSL这一关

2.1 一次HTTPS请求背后到底发生了什么

为了彻底搞明白,我把整个流程用生活化方式还原一下。

假设Maven要去https://repo.maven.apache.org/maven2下载一个jar包。它要做的事,和你在浏览器里打开网银页面几乎一样:

  1. Maven向服务器发起TLS握手请求。
  2. 服务器返回自己的证书,证书上写着“我是repo.maven.apache.org”,同时附带了签发这张证书的上级CA证书。
  3. JVM拿到证书后,拿着证书里的签发者信息,去自己的cacerts信任库里找对应的CA根证书。
  4. 如果找到,就用CA的公钥验证服务器证书的签名是否合法、证书是否过期、域名是否匹配。
  5. 验证通过,握手完成,开始加密传输;验证不通过,抛PKIX path building failed,连接中断。

这其中还有一个细节:服务器返回的证书链可能不完整。有的服务器只返回“叶子证书”而不返回中间CA证书,或者返回的中间CA证书顺序错了,JVM构建证书链时就找不到一条通向根CA的路径,同样报PKIX。这种情况和“JVM不信任根CA”表现完全相同,但修复方式完全不同。

2.2 为什么“根证书缺失”这么常见

新装的JDK、新装的操作系统、公司内网环境,这是三个最容易踩坑的场景。原因分别是:

  • 新JDK:很多人下载的是精简版JDK,或者使用某些“绿色版”JDK,cacerts文件可能不完整。尤其是OpenJDK发行版之间差异不小,某些构建版本对CA根证书的裁剪比较激进。
  • 新操作系统:JVM的cacerts是跟随JDK安装包走的,但它初始化的来源是操作系统的证书库。Windows和Linux在系统证书库的管理方式上完全不同,Windows会跟随系统更新自动更新根证书,而Linux各发行版则依赖ca-certificates包。如果这个包没装或者版本太老,JVM初始化时拿到的根证书列表就不全。
  • 公司内网/企业自建Maven仓库:这是最常见的情况。很多公司用Nexus或Artifactory搭了私服,私服如果用的是自签名HTTPS证书,或者CA证书是公司内部CA发的,那么JVM默认信任库里绝对不可能有这张根证书。这时候访问公司私服必然PKIX报错。

2.3 还有一个隐藏推手:代理与安全软件

企业开发环境里,浏览器一般能正常访问外网,但这不是“网络通”那么简单,很可能是经过了SSL拦截。现在不少公司网关、上网行为管理设备、甚至杀毒软件,都会做“SSL中间人解密”——它们会替换掉Google、Maven中央仓库等HTTPS站点的证书,用自己的证书重新加密流量,以便做内容审计。

这种情况下,你的JVM接触到的证书不是repo.maven.apache.org官方签发的,而是那台代理设备签发的“冒牌”证书。除非你把代理设备的CA证书导入JVM的cacerts,否则Maven必然报PKIX。这种场景下,即使你在Maven的settings.xml里把镜像换成阿里云或华为云,只要流量仍然经过这台代理设备,报错就不会消失。

所以排查时,先搞清楚“是不是有人在中间换过证书”,比一通乱配要高效得多。

3. 按部就班的排查清单:先确定“坏”在哪个环节

遇到PKIX不要上来就改配置。我推荐的排查顺序是:先用命令行工具验证网络链路,再定位是仓库证书问题还是JVM信任库问题,最后才决定用哪种修复方案。

3.1 第一步:确认目标仓库的HTTPS证书是否完整

以Maven中央仓库为例,在终端执行:

openssl s_client -connect repo.maven.apache.org:443 -showcerts

重点看输出的最后几行,如果出现Verify return code: 0 (ok),说明这个站点的证书链本身没问题,能被系统证书库验证通过;如果出现Verify return code: 20 (unable to get local issuer certificate)21 (unable to verify the first certificate),说明服务器下发的证书链不完整,或者系统里缺根证书。

如果你用的是公司私服,把域名换成私服地址再执行一次。这一步能直接区分“仓库证书链有问题”和“本机JVM信任库有问题”两种情况。

3.2 第二步:用curl验证系统层面是否信任该证书

curl -I https://repo.maven.apache.org/maven2/

curl用的是操作系统证书库,如果这里也报SSL certificate problem,说明系统层面上就不信任这个证书;如果curl正常而Maven报错,说明问题基本锁定在JVM的cacerts。这一步非常关键,能帮你少走很多弯路。

3.3 第三步:查看JVM实际使用的cacerts文件位置

很多人以为cacerts就在$JAVA_HOME/lib/security/cacerts,但在较新版本的JDK里,位置和加载逻辑会有差异。用下面这个Java命令最靠谱:

System.out.println(javax.net.ssl.TrustManagerFactory.getDefaultTrustManagerFactoryAlgorithm()); System.out.println(System.getProperty("java.home"));

或者在命令行直接看:

java -XshowSettings:properties -version 2>&1 | grep java.home

找到java.home后,进入对应目录找lib/security/cacerts。注意,有些IDEA自带的JBR(JetBrains Runtime)和项目SDK指定的JDK不是同一个,Maven在IDEA里默认用的是IDEA配置的JRE,很多人改了系统环境变量却不生效,原因就在这。一定要去IDEA的Settings -> Build, Execution, Deployment -> Build Tools -> Maven -> Importing里确认使用的JDK是什么,以及Settings -> Build Tools -> Maven -> Runner -> JRE选择的是哪个版本。

3.4 第四步:检查Maven settings.xml里的镜像和仓库配置

Maven报PKIX时,先看一眼当前生效的settings.xml。全局配置在$MAVEN_HOME/conf/settings.xml,用户配置在~/.m2/settings.xml,两者同时存在时用户配置优先级更高。重点看<mirrors><proxies>两个段落:

<mirrors> <mirror> <id>aliyun</id> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>

如果你配置了镜像但镜像地址的证书不被JVM信任,同样会报PKIX。另外如果配置了<proxies>且代理节点做了HTTPS转发,也可能引发证书链重建问题,可以把<proxies>临时注释掉再试一次。

我把常见场景整理成下面这张表,方便对号入座:

场景特征可能原因排查重点
新电脑/新JDK,首次导入项目报错JDK的cacerts缺失/版本过旧查看JDK版本及cacerts时间
公司内网,私服是自签名证书JVM不信任公司CA用openssl验证私服证书链
所有外网仓库都报错代理/上网设备SSL拦截浏览器访问中央仓库是否正常
内网正常,外网报错中央仓库网络受阻/证书链不完整切换阿里云等镜像仓库
IDEA里Maven报错,但命令行Maven正常IDEA使用了JBR而非项目JDK检查IDEA的Runner JRE配置
平时正常,某天开始报错服务器证书更新/中间CA更换重新导入新证书到cacerts

这张表不敢说覆盖100%情况,但在此类问题里占了九成以上。

4. 解决办法:从“削足适履”到“正本清源”的四种方案

排查清楚之后,修复方案其实就那么几类。我按“推荐的优先级”从高到低排列,并会明确告诉你每种方案的适用场景和风险。

4.1 方案一:修改Maven settings.xml,使用公共镜像仓库

这是我建议所有人最先尝试的方案。如果你的报错指向的是https://repo.maven.apache.org/maven2这个默认中央仓库,而所在网络访问这个仓库本身就不稳定,或者中央仓库的域名证书在你的网络环境下解析有问题,直接换成国内镜像是最省事的。

~/.m2/settings.xml中配置:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"> <mirrors> <mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> </mirrors> </settings>

这里有几个细节要解释一下:

  • <mirrorOf>*</mirrorOf>表示所有仓库请求都走这个镜像,不只是central。实际项目中如果你用了公司私服又想让私服优先,就不能直接写*,最稳妥的写法是<mirrorOf>*</mirrorOf>之外再加一条<mirrorOf>external:*</mirrorOf>的镜像走私服,外部依赖走公共镜像,但这是另一个话题,先不展开。
  • 阿里云镜像的public分组聚合了central、jcenter、public几个仓库,日常开发足够了。
  • 华为云镜像地址是https://repo.huaweicloud.com/repository/maven/,腾讯云也有类似服务,任选一个即可。我个人习惯阿里云,因为历史最长、文档最全。

有些人是公司私服有一定依赖在中央仓库拉不到,但又不想改全局镜像,这时候可以只改中央仓库的镜像,不要用*通配符,避免影响私服访问。

4.2 方案二:把缺失的CA证书导入JVM的cacerts信任库

这也是“正本清源”的做法。如果确认是公司自建Nexus/Artifactory用的内部CA,或者是某台代理设备签发的根证书,那么方案一救不了你——因为镜像也是通过同一台代理出去的,JVM同样不信任代理的证书。

操作步骤如下:

第一步,导出目标网站的证书。用openssl直接连一次Maven中央仓库(或者私服域名),把证书链保存下来:

echo -n | openssl s_client -connect repo.maven.apache.org:443 -showcerts 2>/dev/null | sed -n -e '/-.BEGIN CERTIFICATE-./,/-.END CERTIFICATE-./p' > maven-repo.crt

这个文件里可能包含多个证书块,一般第一个是服务器证书,后面的中间证书不一定要导入JVM信任库,真正需要导入的是“根证书”。但实操中为了方便,很多人把整条链里的根证书单独截出来导入。更稳妥的办法是让公司IT提供CA根证书文件,因为自签名私服的场景,直接连接时拿到的可能只有服务器证书,根CA不一定被返回。

第二步,找到JDK的cacerts并导入。执行:

keytool -import -trustcacerts -alias maven_repo_ca -file maven-repo.crt -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit

这里有几个坑必须提醒:

  • 默认密码是changeit,如果你之前改过就输入自己的密码。
  • -alias不要和别人重复,建议起一个有意义的名称,比如company_nexus_ca,方便以后删除。
  • 如果目标JDK是新版(比如JDK 9+),cacerts格式是PKCS12,但仍然用keytool操作,命令不变。
  • 导入根证书而不是服务器证书。很多人导出时把整条链都导进去了,JVM在构建信任链时一般能自己找到根,但如果只导入了服务器叶子证书,校验是不会通过的。

第三步,验证是否生效。重新执行Maven命令:

mvn clean compile -s ~/.m2/settings.xml

如果还是报PKIX,多半是导错了证书,或者IDEA里用的JDK不是$JAVA_HOME指向的那个。这时回到第3节第三步,确认IDEA实际使用的JRE路径后,把证书导入那个JDK的cacerts里。

4.3 方案三:临时关闭SSL校验(只建议调试环境使用)

这个方法网上到处都在传,但我必须说清楚:它解决的是“Maven拉取依赖时无论如何都报证书错误”的极端情况,适合临时调试、内网测试等非生产环境,千万别在生产环境的构建机上长期使用

具体做法是在Maven的运行参数里加上JVM忽略主机名和信任所有证书的选项。Maven命令行的方式:

mvn clean install -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true

IDEA里则是在Settings -> Build Tools -> Maven -> Runner -> VM Options中填入:

-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true

这三个参数的含义分别是不校验服务器主机名、信任所有证书、忽略证书有效期检查。本质上是让Maven使用的HTTP客户端(Maven Wagon)放弃TLS证书校验。

这个方案的坏处非常明显:等于把HTTPS降级成了“有加密但无认证”的状态,中间人攻击后患无穷。而且有些组织级CMDB扫描器会把这种参数视为安全漏洞直接告警。所以我的态度是:仅限本地开发调试,别写进团队统一的settings.xml里。

4.4 方案四:直接下载明文HTTP仓库地址(不推荐)

还有一种比上面更粗暴的办法,就是让Maven直接走http://repo.maven.apache.org/maven2。虽然中央仓库确实还保留HTTP访问能力,但现在Maven中央仓库早已默认只接受HTTPS,部分请求会被301跳转到HTTPS,你会发现反而更慢更不稳定。

这个方案基本不用,我不建议尝试。

5. 实战记录:一次因企业内网证书拦截引起的PKIX故障处理全过程

理论讲多了容易飘,我复述一个真实处理过的案例,把整个链路串起来。

背景:某公司新入职同学,Windows 11笔记本,装的是公司统一发放的OpenJDK 17,IDEA 2023.2版本,Maven是3.9.x。导入公司内部Spring Boot项目时,Maven面板里所有依赖都报红,错误清一色PKIX path building failed。

我去现场时先问了他三件事:

  1. 浏览器能不能打开https://maven.aliyun.com/repository/public?能。
  2. IDEA里Maven用的是哪个JDK?他看了下是Project SDK 17,没仔细看Runner配置。
  3. 命令行直接执行mvn -v有没有问题?有,但报错信息一样是PKIX。

既然命令行也报错,问题大概率出在JDK层面而不是IDEA层面。接着我在他电脑上跑了:

curl -I https://maven.aliyun.com/repository/public/

结果正常,说明系统证书库信任阿里云证书。那问题就锁定在JVM的cacerts上了。我准备用keytool查一下cacerts里到底有哪些CA:

keytool -list -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit | grep -i aliyun

没有输出,说明阿里云CA不在这个JDK的信任列表里。但正常来说,阿里云用的是公共CA签发的证书,怎么会不在JVM默认信任列表里?这很反常。

然后我仔细看了下他JDK版本,发现是公司内部裁剪过的“安全加固版JDK”,里面删了大量第三方CA根证书。这个版本在pom里配置了-Djavax.net.ssl.trustStore指向公司内部的truststore文件,而不是默认的cacerts。但Maven运行时的JVM参数没有带上这个truststore路径,导致Maven拿到的还是默认信任库。

问题根因清楚了:不是证书本身有问题,而是公司裁剪版JDK把公共CA删了,又依赖自定义truststore,但Maven的启动参数没配置对。

最终修复方式也很简单。在他Maven的Runner VM Options里加上:

-Djavax.net.ssl.trustStore=C:/path/to/company/truststore -Djavax.net.ssl.trustStorePassword=changeit

然后强制刷新Maven依赖,所有依赖一次性恢复正常。

这个案例想说明什么?PKIX报错的表面原因是证书不受信任,但“为什么不受信任”可能有很多层原因。如果你只按网上教程把CA导入cacerts,遇到这种自定义truststore的JDK依然无效。所以排查时一定要先确认JVM实际加载的truststore文件是哪个,再决定改哪里。

另外顺带说一个小经验:公司电脑第一次配置Maven时,直接找IT要公司私服的证书和公司CA根证书文件,顺手把JVM的cacerts备份一份再操作,以后重装系统、换电脑都能少走弯路。

6. 同一片阴影下:PKIX之外的Maven依赖导入异常盘点

PKIX只是Maven导入异常里的“显眼包”,实际开发中还有几个问题也特别常见,而且经常和PKIX一起出现。我在这里一并盘点,省得你翻好几篇文章。

6.1 Maven依赖报红但External Libraries完全没有Maven依赖

IDEA右侧Maven面板能看到项目结构,但External Libraries里没有依赖。这种情况多半是Maven没有真正把依赖下载下来,或者仓库索引有问题。

操作顺序:

  1. 检查~/.m2/repository目录下有没有对应jar文件。如果在,说明依赖已经下载,是IDEA索引问题,执行File -> Invalidate Caches / Restart清缓存。
  2. 如果没有jar文件,说明下载阶段就失败了。先看IDEA的Build窗口有没有隐藏的PKIX或连接超时错误,有就先解决网络链路。
  3. 配置好镜像后,点击Maven面板顶部的“Reload All Maven Projects”按钮,或者直接运行mvn clean compile强制刷新。

6.2 IDEA创建Maven项目报错maven-archetype-plugin

IDEA新建Maven项目时走的是archetype模板下载流程,这个流程同样走HTTPS拉取archetype-catalog.xml和archetype插件。如果你配置的是阿里云镜像,IDEA创建项目时并不会自动应用你settings.xml里的镜像配置,所以经常会看到:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.2.1:generate

或者PKIX报错。这也是为什么很多人在IDEA里新建Maven项目总是卡在“骨架下载”的环节。

解决办法:如果本地已经有稳定的项目模板,就勾选Create from archetype时选择自己已有的模板参数;或者单独配置IDEA的Maven导入时使用的settings.xml路径,确保创建项目时也走镜像。另外可以在~/.m2/settings.xml里加archetype插件的插件仓库镜像:

<profiles> <profile> <id>aliyun-archetype</id> <repositories> <repository> <id>central</id> <url>https://maven.aliyun.com/repository/public</url> </repository> </repositories> </profile> </profiles>

6.3 配置了多个镜像仓库反而更慢

很多人为了让依赖更容易下载,在settings.xml里同时配置了好几个镜像,结果发现不仅没更快,反而经常出现“连接超时”或“乱序拉取”。

原因是Maven解析镜像时按照<mirrorOf>匹配规则,多个镜像同时匹配同一个仓库时会有冲突。一个简单的原则:<mirrorOf>不要用多个不精确的匹配,尽量用external:**只配置一个主镜像,特殊仓库用第二个镜像并缩小匹配范围。

比如:

<mirrors> <mirror> <id>aliyun</id> <mirrorOf>external:*</mirrorOf> <url>https://maven.aliyun.com/repository/public</url> </mirror> <mirror> <id>nexus</id> <mirrorOf>my-nexus</mirrorOf> <url>https://nexus.example.com/repository/maven-public/</url> </mirror> </mirrors>

这样外部依赖走阿里云,通过id=my-nexus明确的仓库走公司私服,互不干扰。

6.4 关于“调低了Maven的日志级别也看不到错误”的情况

有些同学说“我把IDEA里Maven的日志级别调成DEBUG了还是看不到具体错误”。这里要先说清楚,IDEA中Maven控制台日志级别确实能调,在Settings -> Build Tools -> Maven -> Logging里,但这里的设置影响的是Maven Runner的日志输出,而很多PKIX报错发生在IDEA内置的依赖解析阶段,它并不完全等同于命令行Maven输出。

遇到这种情况,最直接的办法是绕过IDEA,在终端直接执行:

mvn clean compile -X

-X参数会开启Maven的debug输出,包括Wagon的HTTP传输日志,你这样能看到到底访问了哪个URL、证书校验在哪一步失败的。这是排查此类问题最硬的底牌。

7. 关于JDK版本、Maven版本和证书问题的三个“隐形耦合”

最后再说几个容易被忽略、但实际影响很大的点。

7.1 JDK 8和JDK 17的cacerts差异

JDK 8的cacerts格式是JKS,JDK 9之后默认变成PKCS12,从JDK 9开始默认还加入了一组新的CA根证书,但不同发行版的差异至今仍然存在。比如某些Linux发行版的OpenJDK 11不含Let's Encrypt根证书,如果你用某个私有仓库用了Let's Encrypt签发的证书,在JDK 11上PKIX,在JDK 17上可能就没事。

遇到这种问题,先去看JDK发布时间和cacerts最后修改时间,思路会更清楚。

7.2 Maven 3.8+默认拦截HTTP仓库

Maven 3.8.0之后,官方默认把http://仓库屏蔽掉了,只允许HTTPS。这就导致部分旧项目里如果配置了HTTP的私服地址,Maven 3.8+直接拒绝访问,报错往往不是PKIX,而是Blocked mirror for repositorieshttp://... blocked。这个虽然和PKIX表现不同,但排查路径相近。如果你忽然发现“换台机器Maven就拉不到依赖了”,先检查Maven版本升级是不是元凶。

7.3 IDEA中的JBR(JetBrains Runtime)和项目JDK不是一回事

IDEA自带了一个JBR,Maven面板的很多内部操作默认使用IDEA的JBR来执行,而不是你配置的Project SDK。如果你在IDEA里把Project SDK换成了某个JDK,但Runner JRE没改,Maven还是可能使用JBR。而JBR和项目JDK的cacerts不是同一个,所以“我在命令行明明导了证书,IDEA里还是报PKIX”的经典翻车现场就出现了。

去IDEA的Settings -> Build Tools -> Maven -> Runner,把JRE指定为你实际导入证书的那个JDK路径,问题立刻消失。我遇到过好几个同事就是死磕系统环境变量,最后发现IDEA里根本没用它。

8. 写在最后:我处理PKIX问题的一点个人习惯

这类问题处理多了以后,我反而养成了一个和网上教程不太一样的习惯:先备份,再操作,绝不轻易用“忽略证书”方案。

具体来说,我会在处理前先执行:

cp "$JAVA_HOME/lib/security/cacerts" ~/cacerts.backup.$(date +%Y%m%d)

这样无论怎么折腾,都能快速回滚。另外导入证书之前先keytool -list看一眼现有的alias列表,避免覆盖已有条目。

还有一个小技巧分享一下:判断证书到底能不能被JVM信任,别来回跑Maven,自己写个最简单的Java类就能验证:

import javax.net.ssl.HttpsURLConnection; import java.net.URL; public class TestTLS { public static void main(String[] args) throws Exception { HttpsURLConnection conn = (HttpsURLConnection) new URL("https://repo.maven.apache.org/maven2/").openConnection(); conn.setConnectTimeout(5000); System.out.println("Response Code: " + conn.getResponseCode()); } }

编译运行后如果正常输出Response Code: 200,说明JVM层面完全信任这个地址,Maven报错就不是证书问题而是其它原因;如果抛异常,那就是JVM信任链断了。这一条验证链比你看十篇博客都管用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 12:58:07

LabVIEW比较运算符详解与应用实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 12:57:07

研究生论文写作必备:9大AI工具评测与使用策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 12:56:30

用 R 可视化蘑菇数据集比例:饼图、环形图与华夫饼图实战

用 R 可视化蘑菇数据集比例&#xff1a;饼图、环形图与华夫饼图实战 【免费下载链接】Data-Science-For-Beginners 10 Weeks, 20 Lessons, Data Science for All! 项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners 本篇文章基于 Data Scie…

作者头像 李华
网站建设 2026/9/13 12:54:50

Neon proxy 如何在本地搭配 Docker Postgres 与自签证书测试 TLS 连接

Neon proxy 如何在本地搭配 Docker Postgres 与自签证书测试 TLS 连接 【免费下载链接】neon Neon: Serverless Postgres. We separated storage and compute to offer autoscaling, code-like database branching, and scale to zero. 项目地址: https://gitcode.com/GitHub…

作者头像 李华
网站建设 2026/9/13 12:49:37

LangChain、LangGraph与LangSmith:LLM工程化三大框架实战解析

1. 项目概述&#xff1a;LLM工程化三大框架的协同价值在大模型应用开发领域&#xff0c;LangChain、LangGraph和LangSmith这三个框架正在形成技术闭环。作为同源技术栈&#xff0c;它们分别解决了LLM工程化中的不同维度问题&#xff1a;LangChain提供模块化组件组装能力&#x…

作者头像 李华