当前位置: 首页 > 知识库问答 >
问题:

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

王轶
2023-03-14

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

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

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

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

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

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

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

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

这是我的模块信息。爪哇:

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

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

我希望我错过了什么,或者是一个简单的配置错误。有没有人遇到过这种情况,你看到了什么可能导致客户机Hello中的数据丢失了吗?

Wireshark跟踪1:

Wireshark Trace 2:

Wireshark Trace 3:

Wireshark握手失败:

共有1个答案

公冶京
2023-03-14

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

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

module TlsHostInfo {
    requires java.base;
    requires javafx.controls;
    requires javafx.fxml;
    **requires jdk.crypto.ec;**

    opens certpackage.view to javafx.fxml;
    exports certpackage;
}
 类似资料:
  • 我正在学习SSL通信,我遇到了这个问题。我正在编写一个简单的客户端,它试图与本地apache服务器握手。服务器启用https。我将服务器证书添加到所有可能的信任存储(jdk中的一个 注意:我从以下教程中获取了代码: http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#KRB 停留

  • 我通过受ssl v3保护的cxf使用soap服务。我从服务器下载.cer文件,并通过keytool使用以下指令创建JKS文件: 在java代码中,我将此代码用于客户端配置: 对于调用此代码的服务: 当我运行代码时,会发生此错误: 我搜索此错误,我意识到该错误是针对不良信任存储的。但我不知道如何生成正确的信任库。

  • 我在使用硒测试时收到此错误 我现在的代码是 是否有其他方法可以忽略/解决此错误?

  • 我正在对我们的数据库服务进行超文本传输协议请求的大循环。一切都很好,但是每当我运行它时,在成功查询(看似随机)数量后,我都会收到以下错误:

  • 试图安装LOEclipse插件以使用Eclipse开发扩展。然而,我从市场收到以下错误: 无法读取http://eclipse-plugins.libreoffice.或....收到致命警报:handshake_failure

  • 当我尝试连接https url时...我得到ssl握手失败...我使用vertx-version 但是在使用vertx的时候。这是握手的问题