2016-07-11 335 views
0

全部 - 我寫了一個dotnet核心API集,在Windows上完美運行。在Ubuntu 14.04上,除了向使用客戶端證書進行身份驗證的供應商提供的一個SOAP請求外,其他所有功能都可以使用Ubuntu上的Dotnet Core客戶端證書

請求總是超時。 Netstat跟蹤顯示只有1個字節的數據在443被髮送到遠程服務。沒有任何通信發生了100秒,然後應用程序拋出超時異常。

我已經嘗試使用openssl導出PEM和CRT文件,並引用除了代碼現在配置的方式(pfx w/password)之外的那些。我還將PFX的證書部分加載到ca-certs中。

下面的代碼:

 var binding = new BasicHttpBinding(); 
     binding.Security.Mode = BasicHttpSecurityMode.Transport; 
     binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; 

     var baseAddress = new Uri(mySettings.ClientUrl); 
     factory = new ChannelFactory<SingleSignOnSoap>(binding, new EndpointAddress(baseAddress)); 
     if (RuntimeEnvironment.OperatingSystemPlatform == Platform.Windows) 
     { 
      //windows file location 
      factory.Credentials.ClientCertificate.Certificate = new X509Certificate2(mySettings.PrivateKeyWindowsPath, mySettings.PfxPass); 
     } 
     else 
     { 
      //linux file location 
      factory.Credentials.ClientCertificate.Certificate = new X509Certificate2(mySettings.ClientPrivateKeyUnixPath, mySettings.PfxPass); 

     } 

     serviceProxy = factory.CreateChannel(); 
     RequestTicketRequest request = new RequestTicketRequest(); 
     RequestTicketRequestBody requestBody = new RequestTicketRequestBody(xmlRequest); 
     request.Body = requestBody; 

     RequestTicketResponse response = serviceProxy.RequestTicket(request); 

     return response.Body.RequestTicketResult; 
+0

我沒有在代碼中包括它,但URL確實使用https:// – mwdavisii

+0

也嘗試使用BasicHttpsBinding無濟於事 – mwdavisii

回答

0

Wireshark的和tshark的顯示認證實際上是工作確定。發生超時是因爲ServiceFactory正在等待接收響應,但網絡已將連接重置標誌([RST,ACK])發送到遠程服務器。我已經能夠在多個linux發行版上重現,所以我在github上的dotnet核心WCF團隊隊列中添加了一個問題。