3

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

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

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

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

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

*证书验证

[写入] MD5 和 SHA1 哈希:len = 262

这里的二进制数据太大不显示

主要,写入:TLSv1 握手,长度 = 262

[原始写入]:长度 = 267

这里的二进制数据太大不显示

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

主要,写入:TLSv1 更改密码规范,长度 = 1

[原始写入]:长度 = 6

0000: 14 03 01 00 01 01

...并以成功结束

..完成的

我们发送一条加密的 Finished 消息以验证一切正常。

验证数据:{221、96、47、110、19、170、244、8、37、152、160、40}

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

[写入] MD5 和 SHA1 哈希:len = 16

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

加密前填充明文:len = 48

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 0B .o.......

主要,写入: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 错误响应

主要,收到EOFException:错误

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

握手期间的连接

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

主要,发送 TLSv1 警报:致命,描述 = handshake_failure

加密前填充明文:len = 32

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

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

主要,写入:TLSv1 警报,长度 = 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 #...

主要的,称为 closeSocket()

主要,称为 close()

main,称为 closeInternal(true)

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

4

1 回答 1

2

关于如何解决这个问题的任何想法?

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

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

于 2013-01-15T02:54:17.413 回答