JavaFX 报错 Received fatal alert: handshake_failure
我写的JavaFX 程序, 我在JDK11 JDK17 JDK21 这些版本 <打包后> 运行下面的代码,全部都会报错
protected void onHelloButtonClick() {try{HttpClient client = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://xxxxxxxxxxx/bapi/c2c/v2/friendly/c2c/user/profile-and-ads-list?userNo=s4a4d8e35bf0f398ba60ed1429f0d964a")).build();HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());welcomeText.setText("Status Code: " + response.body());}catch (Throwable e){e.printStackTrace();StringWriter sw = new StringWriter();e.printStackTrace(new PrintWriter(sw));String stackTrace = sw.toString();welcomeText.setText(stackTrace);}}
错误是 :
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failureat java.base/sun.security.ssl.Alert.createSSLException(Unknown Source)at java.base/sun.security.ssl.Alert.createSSLException(Unknown Source)at java.base/sun.security.ssl.TransportContext.fatal(Unknown Source)at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Unknown Source)at java.base/sun.security.ssl.TransportContext.dispatch(Unknown Source)at java.base/sun.security.ssl.SSLTransport.decode(Unknown Source)at java.base/sun.security.ssl.SSLEngineImpl.decode(Unknown Source)at java.base/sun.security.ssl.SSLEngineImpl.readRecord(Unknown Source)at java.base/sun.security.ssl.SSLEngineImpl.unwrap(Unknown Source)at java.base/sun.security.ssl.SSLEngineImpl.unwrap(Unknown Source)at java.base/javax.net.ssl.SSLEngine.unwrap(Unknown Source)at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader.unwrapBuffer(Unknown Source)at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData(Unknown Source)at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run(Unknown Source)at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(Unknown Source)at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(Unknown Source)at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(Unknown Source)at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)... 1 more
只要是HTTPS 协议就报错,包括发邮件SMTP 协议 !!!
恶心啊,查了两天, 大部分都说是 TLS 协议支持差异 要设置 TLS1.2 TLS1.3
对我没用!!!
还查到说 打包后的JRE 不包含 jdk.crypto.ec 模块导致,但是我也不知道怎么去设置
最后,JDK升级到 23.0.2 问题解决
啥也没干,一样的代码, 正常运行!
还有!!!
必须要模块化不能删除 module-info.java , 不然报错找不到 http客户端 的类
结束