我正在用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

...并以成功完成

..完成

我们发送加密的“完成”消息以验证所有工作。

verify_data:{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 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]

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

加密前填充纯文本: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 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()

主要,称为closeInternal(true)


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

最佳答案

关于如何解决这个问题有什么想法?

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

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

10-08 06:36