使用OpenJDK 14 java模块运行时TLS 1.3握手失败

使用OpenJDK 14 java模块运行时TLS 1.3握手失败,java,ssl,module,Java,Ssl,Module,这是我的第一篇文章。请善待我。我已经搜索了很多网站,但没有任何运气 我创建了一个使用Java14.0.2和JavaFX14.0.2开发的简单Java应用程序,它使用TLS连接到主机,并向用户提供基本的证书和协议信息。它是一种学习、测试和故障排除工具 当使用Intellij或使用OpenJDK 14 GA版本的java.exe运行应用程序并指定应用程序jar的类路径时,TLS的所有版本都可以使用TLS 1.3,包括TLS 1.3 我的问题是TLS1.3在使用Jigsaw中的JLink和Java运行

这是我的第一篇文章。请善待我。我已经搜索了很多网站,但没有任何运气

我创建了一个使用Java14.0.2和JavaFX14.0.2开发的简单Java应用程序,它使用TLS连接到主机,并向用户提供基本的证书和协议信息。它是一种学习、测试和故障排除工具

当使用Intellij或使用OpenJDK 14 GA版本的java.exe运行应用程序并指定应用程序jar的类路径时,TLS的所有版本都可以使用TLS 1.3,包括TLS 1.3

我的问题是TLS1.3在使用Jigsaw中的JLink和Java运行时(JRT)构建模块时不起作用。TLS1.0和1.2工作正常。TLS 1.3因握手失败而失败

我相信这个问题只与使用JRT时在客户端Hello中发送的受支持组或签名算法有关

当使用GA版本的Java和应用程序jar时,客户端发送10个受支持的组,椭圆曲线组(ECDHE)和有限域组(DHE)。它还发送16个签名算法(包括ECDSA算法)

当使用JRT时,客户端发送五个受支持的组,它们只是DHE组。它还发送14个签名算法(不包括ECDSA算法)

我不确定这是因为我的模块信息中缺少需求,还是因为它是一个bug。项目中只有一个模块,模块信息非常基本。生成项目时,除了javax.net.ssl.SSLHandshakeException之外,没有错误/警告,也没有运行时错误

这是我的module-info.java:

module TlsHostInfo {
    requires java.base;
    requires javafx.controls;
    requires javafx.fxml;

    opens certpackage.view to javafx.fxml;
    exports certpackage;
}
我希望我错过了什么,或者是一个简单的配置错误。是否有人遇到过这种情况,您是否看到了导致客户机Hello中丢失数据的原因


在构建自定义运行时,似乎需要SunEC提供程序来支持TLS 1.3

在“module info.java”中添加了“requires jdk.crypto.ec”


我喜欢。解决了我的问题!搜索“javax.net.ssl.SSLHandshakeException:远程主机终止握手”和“由以下原因引起:java.io.eofeexception:ssl对等机错误关闭”的解决方案根本没有帮助。但我也在使用自定义/模块化运行时!这就解决了!
module TlsHostInfo {
    requires java.base;
    requires javafx.controls;
    requires javafx.fxml;
    **requires jdk.crypto.ec;**

    opens certpackage.view to javafx.fxml;
    exports certpackage;
}