【发布时间】:2018-09-19 17:55:59
【问题描述】:
目前我使用的是 Java 7,但无法连接到 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 默认 - 1)EJB 默认 - 1,写入:TLSv1.2 握手,长度 = 221
2018-04-10 15:21:23,446 INFO [stdout](EJB 默认 - 1)EJB 默认 - 1,阅读:TLSv1.2 警报,长度 = 2
2018-04-10 15:21:23,446 INFO [stdout](EJB 默认 - 1)EJB 默认 - 1,RECV TLSv1 ALERT:致命,handshake_failure
2018-04-10 15:21:23,446 INFO [stdout](EJB 默认 - 1)EJB 默认 - 1,称为 closeSocket()
2018-04-10 15:21:23,446 INFO [stdout](EJB 默认 - 1)EJB 默认 - 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 错误
我的问题是:
-
RECV TLSv1 ALERT: fatal, handshake_failure是什么? - 如何在支持的协议中启用 TLSv1.2?
-
编辑 Java 7 或 8 是否支持密码套件:
ECDHE-ECDSA-AES256-GCM-SHA384?
我使用的是 Java 1.7_80。
【问题讨论】:
-
呃,你试图通过禁用其他的来启用 1.2?
jdk.tls.client.protocols="TLSv1.2"和禁用其他人呢?注意,支持 TLS 1.2 和支持 ECDSA 意味着支持两者的结合;密码套件需要实现,它们不会神奇地组合在一起。 -
另外:检查服务器的访问日志;并非所有详细信息都可能在 TLS 错误消息中返回。
-
在我的程序启动脚本中添加了 jdk.tls.client.protocols="TLSv1.2" 但仍然无法正常工作
标签: java encryption tls1.2 sslhandshakeexception sslcontext