1.7.10 默认自动下载的Java 使用authlib-injector 登录会出现 PKIX path building failed
检查项
- [X] 我已尝试使用其他启动器,其他启动器没有出现问题。 如果其他启动器也存在问题,证明是网络环境不佳(解决方法),并非 PCL 的问题,请 不要 提交反馈。下载 HMCL
- [X] 我知晓大多数此类问题都是网络环境不佳导致的,但我确实认为我的问题可能是 PCL 导致的,和网络环境无关。
- [X] 我已在 Issues 页面 和 常见&难检反馈及问题列表 中搜索,确认了这一 Bug 未被提交过。
描述
此bug在新电脑中完美复现 此问题为PCL2自动下载Java版本为8.0.51导致的错误 提议:
- 吧自动下载的Java8版本更换为 8u101+ 或更新
- 自动选择Java逻辑更新
问题解决思路: https://github.com/yushijinhun/authlib-injector/pull/117#issuecomment-841990531
重现步骤
- 随便导入一个1.7.10的整合包(GTNH)
- 然后如果电脑没有Java会提示自动下载Java,自动下载的Java为 8.0.51
- 使用authlib-injector方式登录 并 启动游戏,进入服务器。由于Java因为SSL错误并未成功登录,服务器会报登入失败:服务器目前正在停机维护
日志与附件
参考:
https://github.com/yushijinhun/authlib-injector/issues/119
实机日志:
.minecraft\authlib-injector.log 可查阅到如下日志
[authlib-injector] [WARNING] Reverse proxy error javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1497) at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:212) at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) at sun.security.ssl.Handshaker.process_record(Handshaker.java:914) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1282) at sun.net.www.protocol.http.HttpURLConnection.access$100(HttpURLConnection.java:90) at sun.net.www.protocol.http.HttpURLConnection$8.run(HttpURLConnection.java:1249) at sun.net.www.protocol.http.HttpURLConnection$8.run(HttpURLConnection.java:1247) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessController.doPrivileged(AccessController.java:713) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1246) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250) at moe.yushi.authlibinjector.httpd.URLProcessor.reverseProxy(URLProcessor.java:192) at moe.yushi.authlibinjector.httpd.URLProcessor.access$400(URLProcessor.java:47) at moe.yushi.authlibinjector.httpd.URLProcessor$1.serve(URLProcessor.java:158) at moe.yushi.authlibinjector.internal.fi.iki.elonen.NanoHTTPD$ClientHandler$$Lambda$38/1153271023.apply(Unknown Source) at moe.yushi.authlibinjector.internal.fi.iki.elonen.HTTPSession.execute(HTTPSession.java:246) at moe.yushi.authlibinjector.internal.fi.iki.elonen.NanoHTTPD$ClientHandler.run(NanoHTTPD.java:104) at java.lang.Thread.run(Thread.java:745) Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) at sun.security.validator.Validator.validate(Validator.java:260) at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229) at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1479) ... 24 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:145) at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131) at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) ... 30 more
我觉得要不然用 azul 的 zulu jdk 得了,BakaXL 和 PrismLauncher 就是这样干的,PCL 没道理不能这么做 azul 是个商业公司,应该有能力负担下载流量(
https://cdn.azul.com/zulu/bin/zulu8.82.0.21-ca-jdk8.0.432-win_x64.zip https://cdn.azul.com/zulu/bin/zulu8.82.0.21-ca-jdk8.0.432-win_i686.zip
Edit:虽然没证据表明 Zulu 比官方稳定但相对的也没证据证明官方的一定比 Zulu 稳定,我 Zulu OpenJDK 用到现在也没见崩游戏的情况,如果只是为了一个理论上存在的兼容性问题而降低用户体验,我个人认为不太值当
此问题为PCL2自动下载Java版本为8.0.51导致的错误 吧自动下载的Java8版本更换为 8u101+ 或更新
这个 Java 8u51 是从 Mojang 下载的,也不局限于 Minecraft 1.7.10。龙猫曾经的表态:https://github.com/Hex-Dragon/PCL2/issues/4455#issuecomment-2280054400
自动选择Java逻辑更新
搜寻了一下,看到了个有类似报错的 issue (#3441),但原因不同——他/她的 Java 版本是 8u351。 这个或许可行,让龙猫做决定罢。
我觉得这应该由 Authlib 那边处理,毕竟 8u51 是 Mojang 官方提供的 Java……不兼容官方 Java 就有点…… https://github.com/yushijinhun/authlib-injector/pull/117#issuecomment-841990531
我觉得这应该由 Authlib 那边处理,毕竟 8u51 是 Mojang 官方提供的 Java……不兼容官方 Java 就有点……
Authlib 大概是不会处理的
稍微看了一下,java 内部独立维护了一个证书库,使用 keytool 管理 理论上只需要使用 keytool 导入证书链就行 但是 keytool 还要求导入时输入证书库密码,默认密码是 changeit,这需要通过 stdin 输进去
抽空看了下 Java 属性参数
似乎只要把这个加到 JVM 参数里面
-Djavax.net.ssl.trustStoreType=WINDOWS-ROOT
就能让 Java 信任系统根证书,或许可以缓解此问题,但我用的皮肤站 8u51 有信任证书,没法验证是否可行
cc @LTCatt
@PAKingdom 可以麻烦您提供一下使用的皮肤站吗
@PAKingdom可以麻烦您提供一下使用的皮肤站吗?
Authlib:https://www.mcpa.top/
阁下,感谢您提及我推动此问题。由于已知问题是 8u51 不信任证书导致的,我仍未更换其他 SSL 证书,因此该问题仍可复现
实机日志: .minecraft\authlib-injector.log 由toptal提供的网络剪切板 其实就是实测了一下仍可复现(无特殊含义)
如果您有需要,下列为我在PCL2另一个ISSUES使用过的测试账号与测试服务器。欢迎测试
测试账号与测试服务器(点击展开)
(以下服务跟随issues状态启用) 我非常愿意提供我力所能及的帮助
Authlib:https://www.mcpa.top/ 认证服务器地址:https://www.mcpa.top/api/yggdrasil (如果需要注册账户请注意有隐藏 reCAPTCHA 请注意浏览器是否能访问 https://recaptcha.net/
测试账户 仅供测试 Authlib-Injector
USERNAME [email protected] PASSWORD 1qaz2wsx3edc
测试服务器 使用 1.7.10 原版进入 play.mcpa.top:12002
抽空看了下 Java 属性参数
似乎只要把这个加到 JVM 参数里面
-Djavax.net.ssl.trustStoreType=WINDOWS-ROOT就能让 Java 信任系统根证书,或许可以缓解此问题,但我用的皮肤站 8u51 有信任证书,没法验证是否可行
cc @LTCatt
试试像楼上所说的,将 -Djavax.net.ssl.trustStoreType=WINDOWS-ROOT 加入 Java 参数?
-Djavax.net.ssl.trustStoreType=WINDOWS-ROOT 启动参数可以修复此问题 已实测 考虑在后面的新发行版加入此启动参数吗?不加入我觉得其实可以关闭Issue了?
-Djavax.net.ssl.trustStoreType=WINDOWS-ROOT 启动参数可以修复此问题 已实测 考虑在后面的新发行版加入此启动参数吗?不加入我觉得其实可以关闭Issue了?
正常情况下龙猫包修的(