2016-07-11 2 views
0

alles - Ich habe eine Dotnet-Core-API-Set geschrieben, die perfekt auf Windows funktioniert. Unter Ubuntu 14.04 funktioniert alles außer einer SOAP-Anfrage an einen Anbieter, der ein Client-Zertifikat für die Authentifizierung verwendet.Client-Zertifikate in Dotnet Core unter Ubuntu

Die Anfrage läuft immer ab. Ein Netstat-Trace zeigt, dass nur 1 Byte Daten an den Remote-Dienst auf 443 gesendet wurde. Keine Kommunikation wird für 100 Sekunden ausgeführt, und dann löst die App eine Zeitüberschreitungsausnahme aus.

Ich habe versucht mit openssl PEM-und CRT-Dateien zu exportieren und referenziert diese zusätzlich zu der Art, wie der Code jetzt konfiguriert ist (pfx w/Passwort). Ich habe auch die Zertifikatsteile des PFX in die Zertifikate geladen.

Hier ist der Code:

 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

Ich habe es nicht in den Code aufgenommen, aber die URL verwendet https: // – mwdavisii

+0

Auch versucht, mit BasicHttpsBinding ohne Erfolg – mwdavisii

Antwort

0

Wireshark und Tshark zeigen die Authentifizierung eigentlich ok funktioniert. Die Zeitüberschreitung tritt auf, weil die ServiceFactory auf den Empfang der Antwort wartet, das Netzwerk jedoch ein Verbindungszurücksetzungs-Flag ([RST, ACK]) an den Remote-Server gesendet hat. Ich war in der Lage, auf mehreren Linux-Distributionen zu reproduzieren, so dass ich ein Problem in die Warteschlange des Dotnet-Kern-WCF-Teams auf GitHub hinzufügen.