wake-up-neo.com

Der Client und der Server können nicht kommunizieren, da sie unter Windows Server 2008 Web keinen allgemeinen Algorithmus besitzen

Ich arbeite an einer ASP.Net WebForms-Anwendung. Wir verwenden PayFort's Start API für den Zahlungsvorgang. Die Anwendung läuft einwandfrei auf unserem lokalen Computer (Windows 10), zeigt jedoch einen Folgefehler, wenn wir versuchen, die Zahlung über ihre API auf unserem Bereitstellungsserver (Windows Server Web 2008) vorzunehmen. 

Client und Server können nicht kommunizieren, da sie keinen allgemeinen Algorithmus besitzen.

Die Dokumentation auf ihrer Webseite ( PayFort Start und SSL/TLS ) gibt an, dass sie Tls1.2 für die Kommunikation verwenden. Ihre API enthält bereits den Code zur Verwendung von Tls1.2 als Sicherheitsprotokoll

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Wir haben die Anwendung auf .NET Framework 4.5 erstellt, da Tls1.2 nur von .NET 4.5 oder höher unterstützt wird. Unnötig zu erwähnen, dass auf unserem Server .Net Framework 4.5 installiert ist. 

Wir haben auch die Registrierungswerte für Tls1.1 und Tls1.2 in der Windows-Registrierung hinzugefügt

Mit dem SSL Labs-Tool haben wir außerdem bestätigt, dass mindestens zwei Cipher-Suites von beiden Servern (unserem Server und dem API-Server von PayFort) unterstützt werden ( https: //api.start.). payfort.com

Vom PayFort-API-Server unterstützte Cipher Suites  Cipher suites supported by PayFort's API Server (Grün umrandet sind diejenigen, die bei unserem Server üblich sind) 

Von unserem Server unterstützte Cipher Suites  Cipher Suites supported by our server

Ich habe auch die Nartac IIS Crypto-Software verwendet und es zeigt die folgenden Informationen als Best Practices Nartac IIS crypto details

Ich bin nicht sicher, ob es etwas mit dem Problem zu tun hat oder nicht, aber hier sind die Details des auf unserem Server installierten SSL-Zertifikats 
 SSL certificate details

Kann jemand bitte darauf hinweisen, dass das, was wir falsch machen, und was wir tun sollten, um mit dem gewünschten Server zu kommunizieren und Zahlungen von der auf unserem Server bereitgestellten Anwendung zu tätigen, wie wir dies auf unserem lokalen Rechner tun.

6
sohaiby

Das Problem war das Betriebssystem. Wir verwendeten Windows Server 2008 und erkannten nicht, dass das Anwendungsprotokoll des Betriebssystems für die Kommunikation mit anderen Servern erforderlich ist. Da wir .NET Framework 4.5 installiert haben und den Code ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; verwendet haben, um die Anwendung zur Verwendung von Tls1.2 zu zwingen (entsprechend der Anforderung), glauben wir, dass alles funktionieren sollte, aber offensichtlich würde dies nicht passieren. 
tl; dr; Wir haben Windows Server 2012 auf der Maschine installiert und die Anwendung läuft jetzt einwandfrei (wie es sollte)

1
sohaiby

Ich bin beim Payfort Start Team. Wir haben eine Seite hier , die dieses Problem näher beschreibt. Grundsätzlich muss Ihr API-Client (die Bibliothek, die Sie zur Erstellung der HTTPS-Anforderung verwenden) TLS1.2 unterstützen. Die Start-API lehnt alle Anforderungen ab, die mindestens TLS1.2 nicht unterstützen.

Es scheint, dass der WebRequest TLS 1.1 und 1.2 unterstützt, aber Sie müssen sie manuell aktivieren. Sie können auf diese Antwort für den Fix verweisen.

Um zu überprüfen, ob Ihr Client TLS1.2 unterstützt, können Sie eine GET-Anforderung aus Ihrer Anwendung an https://www.howsmyssl.com/a/check senden und die Antwort lesen.

In cURL:

> curl -X GET https://www.howsmyssl.com/a/check

Kehrt zurück:

{
  given_cipher_suites: [
    "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
    "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
    "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256",
    "TLS_RSA_WITH_AES_128_GCM_SHA256",
    "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
    "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
    "TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
    "TLS_RSA_WITH_AES_256_CBC_SHA",
    "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
    "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
    "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
    "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
    "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
    "TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
    "TLS_RSA_WITH_RC4_128_SHA",
    "TLS_RSA_WITH_RC4_128_MD5",
    "TLS_RSA_WITH_AES_128_CBC_SHA",
    "TLS_RSA_WITH_3DES_EDE_CBC_SHA",
    "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"
  ],
  ephemeral_keys_supported: true,
  session_ticket_supported: true,
  tls_compression_supported: false,
  unknown_cipher_suite_supported: false,
  beast_vuln: false,
  able_to_detect_n_minus_one_splitting: false,
  insecure_cipher_suites: {
    "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA": [
      "uses keys smaller than 128 bits in its encryption"
    ]
  },
  tls_version: "TLS 1.2",
  rating: "Bad"
}

Achten Sie am Ende auf den tls_version.

1
FloatingRock

Ich hoffe, das kann deine Situation etwas klären und helfen:

1 Vergewissern Sie sich, dass die App unter .net 4.5 (oder höher) ausgeführt wird.

TLS 1.2 wird ab 4.5 unterstützt. Die aktuelle Version des .net-Frameworks erhalten Sie unter: https://msdn.Microsoft.com/en-us/library/system.environment.version(v=vs.110).aspx

2 Aktivieren Sie TLS 1.2 in der Windows-Registrierung.

Ich fand diesen Link gerade beim Aktivieren von TLS 1.2 Client und Server können nicht kommunizieren, da sie keinen gemeinsamen Algorithmus besitzen

1
Gabriel Pavel