我有一個 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 名稱
1 回答

蠱毒傳說
TA貢獻1895條經驗 獲得超3個贊
在雙方很多非常聰明的人的幫助下,問題最終變成了服務器名稱指示(SNI):
https://en.wikipedia.org/wiki/Server_Name_Indication
供應商的應用程序正在運行不理解/不支持 SNI 的舊版本 Java,他們目前無法升級。
我們的服務器管理員在我們的 Windows 服務器上為供應商調用的域專用了一個 IP,并為該特定域禁用了 SNI。我們現在可以毫無問題地接收供應商的 Web 服務器調用。
添加回答
舉報
0/150
提交
取消