调用 WCF 的 Java 应用程序返回“连接重置”,而 SoapUI 工作正常

我有一个 C# MVC 应用程序(.NET Framework 4.6.2)和一个位于应用程序内部 /webservice 的 WCF(基于 soap)Web 服务。WCF Web 服务供第 3 方供应商调用并将其数据推送到。我们在 Windows Server 2016 服务器上的测试环境中有应用程序,端口 80 和 443 打开并且我们的证书不是自签名和有效的。当我们使用 SoapUI 测试服务时,我们能够正确访问 WCF Web 服务并将测试数据发布到服务器,但是当我们的供应商从他们的 Java 应用程序发布数据时,他们会得到“连接重置”。我们已经删除了所有身份验证,只是试图让它们到达 WCF,但我们的 IIS 日志和应用程序日志甚至没有显示它们访问了我们的服务器。SoapUI(在我们的网络/防火墙内部和外部)能够正确访问该服务。

<system.serviceModel>

<diagnostics>

  <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000"/>

</diagnostics>

<bindings>

  <basicHttpBinding>

    <binding name="basicBinding" textEncoding="utf-8" openTimeout="00:03:00" closeTimeout="00:03:00"/>

  </basicHttpBinding>

</bindings>

<services>

  <service behaviorConfiguration="serviceBehavior" name="WebServiceUniqueName">

    <endpoint address="/endpoint/soap" binding="basicHttpBinding" bindingConfiguration="basicBinding" name="soapEndpoint" bindingNamespace="https://test.site.com/webservice" contract="Our.Namespace.ISoapContract"/>

    <endpoint address="mex" binding="mexHttpBinding" name="mexEndpoint" contract="IMetadataExchange"/>

    <host>

      <baseAddresses>

        <add baseAddress="/webservice/servicename"/>

      </baseAddresses>

    </host>

  </service>

</services>


我们的服务器使用 TLS 1.2 并回退到 1.1(这正是供应商所期望的)。我们的防火墙没有显示任何被阻止的内容,并且“连接重置”消息是在他们请求的前几秒内出现的。第 3 方能够从他们的浏览器访问 WSDL,所以所有这些让我相信在握手过程中出现了故障。SoapUI 正在通过并在 Java 上运行,所以我们在这一点上真的很困惑。调用 C# WCF 应用程序的 Java 是否需要额外的东西?有没有办法捕获握手尝试?

更多测试后更新:

我们采纳了 Sambit 的建议并使用了 Microsoft Web 服务客户端,并且没有任何问题。我们创建了另一个测试 WCF,还创建了一个调用我们的服务器的应用程序,并将两者都毫无问题地放在 Azure 中。我们可以访问我们的 Web 服务,但供应商仍然无法访问服务器。我们添加了更多日志记录并查看了防火墙,来自供应商的流量正在通过防火墙到达服务器,但报告“从服务器重置 TCP”。

第 3 方供应商的应用程序托管在共享环境中,他们能够在他们的服务器上运行命令,但他们不能更改任何代码来记录额外信息。他们能够 ping 我们的服务器并运行以下命令:

nc -zv (server_url) 443

并且连接成功但是当他们试图从服务器获取证书时失败了:

openssl s_client -tls1_2 -showcerts -connect (server_url):443

已连接(00000003)写:errno=104

--- 没有可用的对等证书

--- 未发送客户端证书 CA 名称


波斯汪
浏览 94回答 1
1回答

蛊毒传说

在双方很多非常聪明的人的帮助下,问题最终变成了服务器名称指示(SNI):https://en.wikipedia.org/wiki/Server_Name_Indication供应商的应用程序正在运行不理解/不支持 SNI 的旧版本 Java,他们目前无法升级。我们的服务器管理员在我们的 Windows 服务器上为供应商调用的域专用了一个 IP,并为该特定域禁用了 SNI。我们现在可以毫无问题地接收供应商的 Web 服务器调用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java