在创建TLS连接时获取“javax.net.ssl.SSLException:MAC数据不匹配”

时间:2013-09-12 07:21:05

标签: java ssl ldap

![在此处输入图片说明] [1] ![在此输入图像说明] [2] ![在此输入图像说明] [3]

我正在尝试在客户端和服务器之间创建安全连接。 客户端支持TLSv1.2,Server支持TLSv1.0。 但得到“javax.net.ssl.SSLException:MAC数据不匹配”异常。

here is the printstacktrace :

    javax.net.ssl.SSLException: MAC data does not match.
            at com.rsa.sslj.x.aJ.b(Unknown Source)
            at com.rsa.sslj.x.aJ.a(Unknown Source)
            at com.rsa.sslj.x.aJ.a(Unknown Source)
            at com.rsa.sslj.x.aU.c(Unknown Source)
            at com.rsa.sslj.x.aU.a(Unknown Source)
            at com.rsa.sslj.x.aU.h(Unknown Source)
            at com.rsa.sslj.x.cI.startHandshake(Unknown Source)
            at com.sun.jndi.ldap.ext.StartTlsResponseImpl.startHandshake(StartTlsResponseImpl.java:361)
            at com.sun.jndi.ldap.ext.StartTlsResponseImpl.negotiate(StartTlsResponseImpl.java:225)
            at com.cisco.ccm.admin.utilities.LdapUtil.validateHost(LdapUtil.java:383)
            at com.cisco.ccm.admin.utilities.LdapUtil.validateHost(LdapUtil.java:289)

我在我的代码中检查了使用getEnabledProtocols()方法启用的protcols是SSLv3,TLSv1,TLSv1.1和TLSv1.2。 我在TLSv1.2 rfc中读到,如果服务器支持较低版本的TLS,那么客户端,客户端应该与较低版本的TLS协商。

但在我的情况下,我得到了上述异常。(为什么?? ......不应该发生并与TLSv1协商)。

注意:此外,如果我将启用的协议仅设置为TLSv1,那么我可以创建TLS连接。

请帮帮我。 感谢

  [1]: http://i.stack.imgur.com/RC4Ha.jpg
  [2]: http://i.stack.imgur.com/rjXjq.jpg
  [3]: http://i.stack.imgur.com/WIRvF.jpg

1 个答案:

答案 0 :(得分:0)

这绝对是版本不兼容的问题。有一点可以肯定的是,TLS是SSL的新名称。即SSL协议达到3.0版; TLS 1.0是“SSL 3.1”。目前定义的TLS版本包括TLS 1.1和1.2。

此外,以下wiki链接(http://en.wikipedia.org/wiki/Transport_Layer_Security)显示

All TLS versions were further refined in RFC 6176 in March 2011 removing their backward compatibility with SSL such that TLS sessions will never negotiate the use of Secure Sockets Layer (SSL) version 2.0.

在TLS和SSL之间,MAC / HMAC也不同(TLS使用HMAC,而SSL使用早期版本的HMAC)。我怀疑你的代码仍然可能会选择我们的SSL。您可以请禁用SSL并重试吗?