У меня есть серверное приложение 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], как показано ниже:
Я посмотрел на настройку тайм-аута соединения на моем сервере 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