0

![在此处输入图像描述][1] ![在此处输入图像描述][2] ![在此处输入图像描述][3]

我正在尝试在客户端和服务器之间创建安全连接。客户端支持 TLSv1.2,服务器支持 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() 方法检查了我的代码启用的协议是 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
4

1 回答 1

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 并重试?

于 2013-09-12T07:39:51.850 回答