建立SSL连接时出现EOFException错误

时间:2013-01-15 02:44:46

标签: java ssl eofexception

我正在用java编写一个程序,将官方发票信息发送给财政管理部门。此公共服务提供了证书,以便在与Web服务的SSL连接中使用,并加密请求正文消息中的某些特定数据字段。

在客户端和服务器同意使用商定的密码套件(在本例中为TLS_RSA_WITH_AES_128_CBC_SHA)进行通信后,我在握手阶段遇到了EOFException错误。

遵循SSL协议,客户端使用新密码成功执行测试并将测试数据发送到服务器,以便服务器也可以重复相同的测试并确认它还能够加密和解密数据。在这一点上,服务器发送EOFException。

以下是SSL通信日志的最后一部分:

  

向服务器发送快速确认,确认我们知道与我们刚刚发送的客户端证书相对应的私钥...

     

* CertificateVerify

     

[write] MD5和SHA1哈希:len = 262

     

这里的二进制数据太大而没有显示

     

main,WRITE:TLSv1握手,长度= 262

     

[原始写入]:长度= 267

     

这里的二进制数据太大而没有显示

     

* 告诉服务器我们要更改为新建立的密码套件。所有其他消息将使用我们刚刚建立的参数进行加密。 *

     

main,WRITE:TLSv1 Change Cipher Spec,length = 1

     

[原始写入]:长度= 6

     

0000:14 03 01 00 01 01

     

...并成功完成

     

..成品

     

我们发送加密的已完成邮件以验证一切正常。

     

verify_data:{221,96,47,110,19,170,244,8,37,152,160,40}

     

...    客户端加密测试数据..

     

[write] MD5和SHA1哈希:len = 16

     <00> 0000:14 00 00 0C DD 60 2F 6E 13 AA F4 08 25 98 A0 28 .....` / n ....%..(

     

ENCRYPTION之前的填充明文:len = 48

     <00> 0000:14 00 00 0C DD 60 2F 6E 13 AA F4 08 25 98 A0 28 .....` / n ....%..(

     

0010:10 7F 85 11 EC 6D 5D ED 21 70 27 F4 DC 23 C0 9B ..... m]。!p'..#..

     

0020:A7 6F C2 80 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B .o ..............

     

main,WRITE:TLSv1握手,长度= 48

     

* ...并将测试数据发送到服务器,以便服务器可以进行相同的测试并确认可以建立加密通信(53个字节= 48个测试数据+ 5个来自标头)*

     

[原始写入]:长度= 53

     

0000:16 03 01 00 30 1C 17 08 0F 49 C9 6A 7A 8B 8C 48 .... 0 .... I.jz..H

     

0010:BA 57 2D CB 06 46 1E 65 61 7C 5F 74 F2 08 AB 12 .W - .. F.ea._t ....

     

0020:91 47 72 8C 8F 84 0A CB D7 29 E2 FD 84 B2 FD 9E .Gr ......)......

     

0030:47 DC 13 60 B4 G..`。

     

...并且服务器响应EOFException错误

     

main,收到EOFException:错误

     

main,处理异常:javax.net.ssl.SSLHandshakeException:远程主机已关闭

     

握手期间的连接

     

%%无效:[会话-1,TLS_RSA_WITH_AES_128_CBC_SHA]

     

main,SEND TLSv1 ALERT:致命,描述= handshake_failure

     

ENCRYPTION之前的填充明文:len = 32

     

0000:02 28 BC 65 1A CA 68 87 79 84 5F 64 16 F5 28 72。(。e..h.y._d ..(r

     

0010:F7 8A 69 72 93 D8 09 09 09 09 09 09 09 09 09 09 ..ir ............

     

main,WRITE:TLSv1 Alert,length = 32

     

[原始写入]:长度= 37

     

0000:15 03 01 00 20 0D 9A 35 18 B7 98 4B 7B AF 82 4E .... 5 ... K ... N

     

0010:1A EE 7D AC 5D D5 49 05 4E 74 B9 77 E4 CD 87 61 ....]。I.Nt.w ... a

     

0020:23 03 5C 9C 7E#...

     

main,名为closeSocket()

     

main,名为close()

     

main,名为closeInternal(true)

我不知道造成这种失败的原因是什么,以及如何以编程方式影响此过程中此步骤的结果。我已经尝试强制使用客户端和服务器识别的其他密码,例如SSL_RSA_WITH_RC4_128_MD5,但错误仍然存​​在。 有关如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:2)

  

有关如何解决此问题的任何想法?

我建议您与运行该服务的人员联系,让他们查看他们的日志,了解他们的服务器在SSL设置期间关闭连接的原因。

(严格来说,服务器没有“以[an] EOFException错误响应”。它实际上正在关闭TCP连接,而客户端Java库正在抛出异常。如果使用正确的术语,您可能会从服务的维护者那里得到更有帮助的回复。)