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

带有TLSV1.2的Java 7连接到LDAPS握手失败

闾丘书
2023-03-14

目前我使用的是Java7,我无法连接到LDAPS。我尝试了下面的代码,但仍然无法连接:

SSLContext ctx = SSLContext.getInstance("TLSv1.2");
ctx.init(null, null, null);
SSLContext.setDefault(ctx);

2018-04-10 15:21:23,446 INFO[stdout](EJB default-1)EJB default-1,write:TLSV1.2握手,长度=221

2018-04-10 15:21:23,446 INFO[stdout](EJB default-1)EJB default-1,read:TLSV1.2 Alert,length=2

2018-04-10 15:21:23,446 INFO[stdout](EJB default-1)EJB default-1,RECV TLSv1警报:fatal,handshake_failure

2018-04-10 15:21:23,446 INFO[stdout](EJB default-1)EJB default-1,称为closeSocket()

2018-04-10 15:21:23,446 INFO[stdout](EJB default-1)EJB default-1,处理异常:javax.net.ssl.sslhandShakeException:收到致命警报:handshake_failure

之后,我尝试运行协议测试来检查支持的协议:

Supported Protocols: 5
  SSLv2Hello
  SSLv3
  TLSv1
  TLSv1.1
  TLSv1.2
Enabled Protocols: 1
  TLSv1

我在java.security中添加了下面一行来禁用TLSv1并启用TLSv1.2:

jdk.tls.disabledAlgorithms= SSLv3, SSLv2Hello, TLSv1, TLSv1.1

再次运行协议测试,结果是:

Supported Protocols: 5
  SSLv2Hello
  SSLv3
  TLSv1
  TLSv1.1
  TLSv1.2
Enabled Protocols: 0

我已经确认我的LDAPS服务器是受支持的,并且使用TLSV1.2。我还在Java控制面板中启用了TLS1.2,因为每当我试图使用TLSv1时,它都会导致protocol_version错误

  1. 什么是recv TLSv1警报:fatal,handshake_failure
  2. 如何在受支持的协议中启用TLSv1.2?
  3. 编辑Java 7或8是否支持密码套件:ECDHE-ECDSA-AES256-GCM-SHA384

我使用的是Java1.7_80。

共有1个答案

富波光
2023-03-14
  1. 什么是RECV TLSv1警报:fatal,handshake_failure?

这意味着我们收到了(在Java SSL/TLS代码中,JSSE)来自服务器的严重程度为fatal,类型为handshake_failure的警报。由于它是在发送一条握手消息后立即发生的,如果您没有从发布的日志提取中省略其他相关信息,我们可能会收到响应ClientHello消息的此警报,这是发送的第一条握手消息。

这里的“TLSV1”可能会产生误导。它是SSLSOCKETIMPL对象中的一个变量,初始化为TLSv1,直到握手完成后才更新,因此此时它不能准确地指示所使用的协议版本。前面的日志条目“read:tlsv1.2 Alert,length=2”确实显示了接收到的实际版本,并确认服务器至少正在尝试执行TLS1.2。

是什么导致handshake_failure?很多很多事情。从这个警报中几乎不可能判断出问题所在。

>

  • 您最好的选择是查看服务器日志,找出它发送警报的原因。

    最糟糕的选择是查看我们发送的ClientHello--其中大部分应该在发布行之前由JSSE记录--并考虑服务器可能不喜欢的值或不喜欢的所有内容,并尝试更改它们中的每一个。有些是比较容易改变的,有些是非常困难的,所以这可能需要几个小时到几周之间的任何地方。

    Oracle/Sun和OpenJDK7不支持GCM密套件。或者更确切地说,它们中的标准JSSE提供者没有,您也没有说要更改提供者。(IBM Java使用不同的提供者,我不知道它们的情况,但它们大多使用不同的命名格式。)

    Oracle和OpenJDK8确实支持GCM套件。但是,旧的Oracle更新不支持256位AES,除非下载并安装“无限权限策略”文件;你可以找到很多其他的Qs。这是最近修复的;8U151/152只需要一个文本编辑,而不需要下载文件,8U161/162和更高的不需要任何改变。Oracle9或任何OpenJDK都不是。

  •  类似资料:
    • 我们很难与远程机器(如PayPal vb)建立https连接谁从我们的系统中禁用了SSL3协议。Net应用程序。HttpWebRequest实例的GetResponse方法出现以下异常。 请求被中止:无法创建SSL/TLS安全通道。 当我们使用WireShark深入并跟踪网络日志时,我们看到远程机器返回以下错误 TLSv1。2警报(级别:致命,描述:握手失败)握手失败40 更有趣的情况是,当我尝试

    • 我正在尝试编写一个JAVA程序来连接到JIRA REST API。我使用与此类似的代码通过我的证书连接到其他服务: 我得到一个错误: main,处理异常: javax.net.ssl.SSLHandshakeException: Received fatal alter: handshake_failure javax.net.ssl.SSLHandshakeExcepitp: Received

    • 在这个基于Xcode7(beta)构建的应用程序中,TCP套接字连接(NSStream)失败,错误如下。 在info.plist中,我还包括了以下相关异常的ATS。 但在下面的委托中 -(void)stream:(NSStream*)stream HandleEvent:(NSStreamEvent)eventCode 我得到的事件代码为8,表示错误发生。具有上述描述。 验证错误:num=19:证

    • 我正在使用C Builder 10.1柏林编写一个简单的WebSocket服务器应用程序,它在端口上侦听从网络浏览器发送的一些命令,如谷歌Chrome。 在我的表单上,我有一个TMemo、TButton和TIdHTTPServer,我有以下代码: 从Chrome,我执行这个Javascript代码: 但是我从Chrome上得到了这个错误: VM77:1到“ws://localhost:55555/

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

    • NodeJS的socket.io似乎不能作为websocket服务器工作 谢谢你的帮助