Устранение неполадок с соединением AS2 - TCP RST отправляется после квитирования TLS - PullRequest
0 голосов
/ 31 октября 2018

У меня есть серверное приложение AS2 (RSSBus), работающее в IIS 7.5 на Windows Server 2008 R2. У меня есть несколько активных соединений, которые отлично работают по 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) и обмен ключами (Диффи-Хеллман, PKCS, ECDH). Возможно, я отключил что-то, что используют мои торговые партнеры, но я знаю, что они оба используют TLS 1.2, и я видел ключ Диффи-Хеллмана в информации о Wireshark, поэтому я тоже не думаю, что это так. Тем не менее, мои знания об этом очень ограничены, поэтому я могу быть далеко.

Я просто пытаюсь понять, где искать дальше. Есть ли что-то в 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 голосов
/ 16 ноября 2018

Этому вопросу 16 дней, но я надеюсь, что вы все еще рядом, потому что вы нашли нужного человека. Я имею дело с такими вещами все время, и это может быть настоящей болью в заднице. Важно помнить, что хотя AS2 и HTTPS безумно сложны, реальные возможности, с которыми вам приходится работать в RSSBus, довольно ограничены. Да, WireShark может помочь в диагностике некоторых проблем, связанных с волосатостью, но есть много других мест, где можно посмотреть, прежде чем погрузиться в WireShark со скрещенными пальцами.

Итак, давайте начнем с самого начала, у вас есть рабочие HTTP-соединения, и вы уверены, что проблемы, с которыми вы сталкиваетесь, связаны с SSL.

Что именно вы пытаетесь сделать? Похоже, вы пытаетесь отправить файлы по URL-адресу HTTPS вашего партнера, и вы получаете «Соединение закрыто удаленным хостом» от обоих партнеров. Можете ли вы получать файлы от них?

Я возьму здесь дикую догадку «Радуйся, Мария» и скажу, что, возможно, проблема в несовместимости 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 не говорит спасибо, что он отключен, пока соединение закрыто. Вы, наверное, думаете: «Но, Том, я вижу флажок TLS 1.2 в RSSBus!». Мой ответ - «Получи приманку, малыш», потому что это, по сути, то, что сказал мне RSSBus (хотя их команда поддержки действительно очень хорошо осведомлена).

Как вы их включаете? Я действительно не знаю, я никогда не делал это успешно, потому что я использовал даже более старые операционные системы, когда столкнулся с этой проблемой. В итоге я перешел на Windows 10 и назвал его днем ​​(это вызвало проблему с SSLv2 другого торгового партнера, но это уже другая история). Это не должно быть слишком сложно, дайте ему Google и дайте мне знать, как у вас дела.

...