解决AS2连接问题-TLS握手后发送TCP RST

时间:2018-10-30 22:34:22

标签: https tcp iis-7.5 wireshark edi

我在Windows Server 2008 R2的IIS 7.5中运行了一个AS2服务器应用程序(RSSBus)。我有一些活动连接可以在HTTP上正常工作,但是没有活动连接可以在HTTPS上正常工作。我尝试建立HTTPS连接有两个不同的贸易伙伴,但是它们失败了,并且我从他们那里收到的错误消息非常相似。请注意,我为正在使用的域配置了有效的SSL证书,并且我相信它可以正常工作。

我从贸易伙伴那里收到的错误使我相信问题是我的配置错误,但是我一直无法解决问题。

以下是错误之一(我已编辑了一些识别信息):

2018/10/30 16:38:33 Run: type="API"
2018/10/30 16:38:35 Detail: "Using proxy http://xxxxxxxx:8080..." level=1
2018/10/30 16:38:35 Result: "Success" "Return status=0"
2018/10/30 16:38:35 Detail: "Connecting to https://www.yyyyyyyy.com:443..."
2018/10/30 16:38:35 File: source="/edi/mft/harmony/sendtest/sendTest_X12" direction="Local->Host" number=1 of 1 fileSize=529 fileTimeStamp=2018/10/30 16:38:35 transferID="AS2-20181030_163835722-J" docDBTransferID="37ede9ac-a23d-4ed6-85bc-879d4939a04f"
2018/10/30 16:38:35 HTTP: "POST /rssbus/pub/Receive.rsb"
2018/10/30 16:38:35 Detail: "AS2-From: SenderAS2Id, AS2-To: ReceiverAS2Id, Subject: EDIINTDATA, Content-Type: X12"
2018/10/30 16:38:35 Detail: "Sending signed and encrypted [TripleDES] message to ReceiverAS2Id..." level=1
2018/10/30 16:38:44 Exception: "java.io.EOFException: Connection closed by remote host. 
  at iaik.security.ssl.Utils.a(SourceFile:291) 
  at iaik.security.ssl.ab.b(SourceFile:452) 
  at iaik.security.ssl.ab.e(SourceFile:374) 
  at iaik.security.ssl.y.f(SourceFile:365) 
  at iaik.security.ssl.n.b(SourceFile:729) 
  at iaik.security.ssl.n.a(SourceFile:1509) 
  at iaik.security.ssl.y.d(SourceFile:784) 
  at iaik.security.ssl.SSLTransport.startHandshake(SourceFile:569) 
  at iaik.security.ssl.SSLSocket.startHandshake(SourceFile:386) 
  at HTTPClient.HTTPConnection.sendRequest(HTTPConnection.java:3094) 
  at HTTPClient.HTTPConnection.handleRequest(HTTPConnection.java:2910) 
  at HTTPClient.HTTPConnection.setupRequest(HTTPConnection.java:2702) 
  at HTTPClient.HTTPConnection.Post(HTTPConnection.java:1148) 
  at com.cleo.lexicom.protocols.http.HTTP.post(HTTP.java:750) 
  at com.cleo.lexicom.beans.as2bean.HttpSender.prepareToSend(HttpSender.java:206) 
  at com.cleo.lexicom.beans.as2bean.SMimeClient.sendSignedThenCompressedAndEncryptedMessage(SMimeClient.java:2163) 
  at com.cleo.lexicom.beans.as2bean.SMimeClient.sendMessage(SMimeClient.java:364) 
  at com.cleo.lexicom.beans.as2bean.AS2Action.post(AS2Action.java:398) 
  at com.cleo.lexicom.beans.httpbean.HttpAction.issue(HttpAction.java:2602) 
  at com.cleo.lexicom.beans.httpbean.HttpAction.put(HttpAction.java:1139) 
  at com.cleo.lexicom.beans.httpbean.HttpAction.put(HttpAction.java:890) 
  at com.cleo.lexicom.beans.httpbean.HttpAction.putFile(HttpAction.java:846) 
  at com.cleo.lexicom.beans.httpbean.HttpAction.putFile(HttpAction.java:800) 
  at com.cleo.lexicom.beans.httpbean.HttpAction.putFileLoop(HttpAction.java:704) 
  at com.cleo.lexicom.beans.httpbean.HttpAction.put(HttpAction.java:614) 
  at com.cleo.lexicom.beans.httpbean.HttpAction.macroCommand(HttpAction.java:461) 
  at com.cleo.lexicom.beans.LexActionBean.executeCommand(LexActionBean.java:4199) 
  at com.cleo.lexicom.beans.LexActionBean$LexBeanRunCommand.run(LexActionBean.java:4315) 
  at java.lang.Thread.run(Thread.java:748) "
2018/10/30 16:38:44 Hint: "Host did not send a complete response before closing connection."
2018/10/30 16:38:44 Result: "Exception" "java.io.EOFException: Connection closed by remote host."
2018/10/30 16:38:44 End

我已经在此连接测试期间运行了Wireshark,我看到它已经通过了正常的连接过程,但是在我看到“客户端密钥交换,更改密码规范,加密的握手消息”从发送者到我的服务器后,发送回[RST,ACK],如下所示:

Wireshark screenshot

我已经查看了AS2服务器上的连接超时设置,并将其设置为60秒,我认为这足够长了,从上述时间戳来看,重置几乎是立即发送的。

在我的服务器上,我使用应用程序IIS Crypto仅启用“最佳实践”协议(TLS 1.0、1.1、1.2),密码(3DES 168,AES 128/128,AES 256/256),哈希( MD5,SHA,SHA 256,SHA 384,SHA 512)和密钥交换(Diffie-Hellman,PKCS,ECDH)。我可能禁用了我的贸易伙伴正在使用的某些功能,但是我知道他们都使用了TLS 1.2,并且在Wireshark信息中看到了Diffie-Hellman键,因此我也不是这样。但是,我对此的了解非常有限,因此我可能会遥遥无期。

我真的只是想弄清楚下一步要去哪里。 Wireshark中有什么我可以用来解决问题的吗?我已经尝试检查了某些框架,但还没有发现对我有很大帮助的任何东西。

请注意,当我从HTTPS切换到http时,相同的精确连接测试也会成功。可以从下面查看该成功测试:

2018/10/30 16:28:37 Run: type="API"
2018/10/30 16:28:38 Detail: "Using proxy http://xxxxxx:8080..." level=1
2018/10/30 16:28:38 Result: "Success" "Return status=0"
2018/10/30 16:28:38 Detail: "Connecting to http://www.yyyyyyy.com:80..."
2018/10/30 16:28:38 File: source="/edi/mft/harmony/sendtest/sendTest_X12" direction="Local->Host" number=1 of 1 fileSize=529 fileTimeStamp=2018/10/30 16:28:38 transferID="AS2-20181030_162838070-J" docDBTransferID="d621b86f-0600-46bb-ac12-3cb5bb9e6203"
2018/10/30 16:28:38 HTTP: "POST /rssbus/pub/Receive.rsb"
2018/10/30 16:28:38 Detail: "AS2-From: SenderAS2Id, AS2-To: ReceiverAS2Id, Subject: EDIINTDATA, Content-Type: X12"
2018/10/30 16:28:38 Detail: "Sending signed and encrypted [TripleDES] message to ReceiverAS2Id..." level=1
2018/10/30 16:28:38 Detail: "Waiting for response..." level=1
2018/10/30 16:28:38 File: source="MDN" direction="Host->Local" destination="AS2/mdn/xxxxx/received/CLEO-20181030_212838173-44K62B@08925485US00_8436230-J_20181030-162838.mdn" number=1 of 1
2018/10/30 16:28:38 Response: "200 OK"
2018/10/30 16:28:38 Result: "Success" "Sent and Received Message Integrity Check codes match Source file copied to '/edi/mft/data/AS2/edi/xxxxx/sentbox/sendTest_X12_HY1139-MB8931_20181030-162838'."
2018/10/30 16:28:38 End

1 个答案:

答案 0 :(得分:0)

这个问题已经有16天了,但是我希望您仍然在身边,因为您找到了合适的人。我一直都在处理这种东西,这可能是一个真正的痛苦。要记住的最重要的事情是,尽管AS2和HTTPS异常复杂,但是您在RSSBus中必须使用的实际选项却非常有限。是的,WireShark可以帮助诊断一些毛茸茸的问题,但是在用手指交叉进入WireShark之​​前,还有许多其他地方值得一看。

因此,让我们从顶部开始,您拥有正常的HTTP连接,并且确信所遇到的问题与SSL相关。

您要尝试执行的操作到底是什么?似乎您正在尝试将文件发送到合作伙伴的HTTPS URL,并且两个伙伴都获得了“远程主机关闭连接”。您可以从他们那里收到文件吗?

在这里,我要大惊小怪地猜猜玛丽,然后说问题可能出在SSL / TLS不兼容。 RSSBus实际上将Windows Schannel用于SSL,它不是内置在软件中(对于大多数AS2软件而言,这是正确的,他们很愚蠢地不这样做)。因此,您的SSL功能受Windows Server 2008 R2约束。因此,让我们看一下:https://docs.microsoft.com/en-us/windows/desktop/secauthn/protocols-in-tls-ssl--schannel-ssp-

它对2008 R2表示什么?默认情况下仅启用TLS 1.0。 TLS 1.1和1.2被禁用。因此,除非您手动启用了这些功能,否则在SSL握手过程中,贸易伙伴服务器会要求提供TLS 1.2,而Windows Server 2008 R2则表示不谢,它已被禁用,再见,连接已关闭。您可能在想:“但是汤姆,我可以在RSSBus中看到TLS 1.2方框被打勾!”。我的答案是“被诱饵的孩子”,因为这实际上是RSSBus告诉我的(尽管他们的支持团队确实知识渊博)。

如何启用这些功能?我真的不知道,我从未成功完成过,因为遇到这个问题时我使用的甚至是较旧的操作系统。我最终转而使用Windows 10,并称其为一天(这导致另一个贸易伙伴的SSLv2出现问题,但这是另一回事了)。不过,它应该不太困难,给它一个Google并让我知道您的情况。