So konfigurieren Sie IIS 7.5 SSL \ TLS für die Verwendung mit iOS 9 ATS

11

Problem: Unsere mobile App kann keine sichere Verbindung zu unserem Webdienst mehr herstellen, da iOS 9 jetzt ATS verwendet.

Hintergrund: iOS 9 führt App Transport Security ein

Server-Setup: Windows Server 2008 R2 SP1 (VM) IIS 7.5, SSL-Zertifikate von Digicert. Windows-Firewall ausgeschaltet.

Schlüssel RSA 2048 Bit (e 65537)

Aussteller DigiCert SHA2 Secure Server CA.

Signaturalgorithmus SHA512withRSA

Dies sind die Sicherheitsanforderungen für den App-Transport:

Der Server muss mindestens das TLS-Protokoll (Transport Layer Security) Version 1.2 unterstützen. Verbindungs-Chiffren sind auf diejenigen beschränkt, die Vorwärtsgeheimnis bieten (siehe Liste der Chiffren unten). Zertifikate müssen mit einem SHA256-Hash-Algorithmus oder einem besseren Signatur-Hash-Algorithmus mit einem RSA-Schlüssel mit 2048 Bit oder mehr oder einer Elliptic-Kurve mit mindestens 256 Bit signiert werden (ECC) Schlüssel. Ungültige Zertifikate führen zu einem harten Fehler und keiner Verbindung. Dies sind die akzeptierten Chiffren:

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

Was wurde versucht:

  1. Hinzufügen von Ausnahmen in der mobilen App, damit unsere Domain funktioniert, aber ich möchte nicht mit dieser ungesicherten Methode arbeiten, sondern unser SSL reparieren.
  2. Verwendete IIS Crypto , um "Best Practice", "PCI" und benutzerdefinierte Setups zu verwenden. Es wurde sogar versucht, die Crypto-Suite auf die obige Liste zu ändern und neu zu ordnen. Nach jedem Versuch wird der Server neu gestartet und SSL Labs wurde ausgeführt (nachdem der Cache geleert wurde). Es gelang mir, von einer F-Bewertung zu einer A-Bewertung und sogar zu einer A-Bewertung zu wechseln, aber dies führte nur dazu, dass iOS 8 und 9 keine sicheren Verbindungen herstellen konnten. (NSURLErrorDomain Code = -1200 und _kCFStreamErrorCodeKey = -9806) Geben Sie hier die Bildbeschreibung ein
  3. VM wiederhergestellt und ein Powershell-Skript ausprobiert Richten Sie Ihren IIS für SSL Perfect Forward Secrecy und TLS 1.2 ein. Ich habe sogar einen zweiten Versuch unternommen, bei dem ich Chiffren aus dem Power-Skript herausgeschnitten habe, um eine minimale Liste der erforderlichen Elemente zu erhalten.

Ergebnisse: Immer ähnlich, Bewertungen von A oder A-. iOS8 und iOS9 können keine sichere Verbindung aushandeln. Die Handshake-Simulation führt zu einer "Nichtübereinstimmung von Protokoll oder Cipher Suite" für Safari- und iOS-Produkte. Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

UPDATE Nachdem wir mit dem Apple-Support zusammengearbeitet hatten, haben wir einige Paketverfolgungserfassungen durchgeführt:

$ tcpdump -n -r trace.pcap
reading from file trace.pcap, link-type EN10MB (Ethernet)
client > server [S], seq 1750839998, win 65535, length 0
server > client [S.], seq 2461151276, ack 1750839999, win 8192, length 0
client > server [.], ack 1, win 4104, length 0
client > server [P.], seq 1:175, ack 1, win 4104, length 174
server > client [R.], seq 1, ack 175, win 0, length 0

Die ersten drei Pakete sind der klassische Drei-Wege-Handshake SYN - SYN-ACK - ACK, mit dem die TCP-Verbindung hergestellt wird. Das vierte Paket ist iOS, das Ihrem Server eine TLS-Client-Hello-Nachricht sendet. Dies ist der erste Schritt beim Einrichten einer TLS-Verbindung über diese TCP-Verbindung. Ich habe diese Nachricht auseinandergezogen und sie sieht vernünftig genug aus. Im fünften Paket trennt der Server einfach die Verbindung (durch Senden eines RST).

Weiß jemand, warum IIS 7.5 eine RST durchführen würde?

RobDigital
quelle
Ich habe Digicert erneut kontaktiert. Wir haben mein RSA-Zertifikat gegen ein ECC-Zertifikat ausgetauscht. Ich habe jetzt iOS 9, das sicher funktioniert, aber jetzt stellt iOS 8 bei mehreren Konfigurationsversuchen keine Verbindung her.
RobDigital

Antworten:

5

Die Frage ist alt, wird aber bei der Suche gefunden. Ich habe einige Zeit damit verbracht, eine Lösung für das gleiche Problem zu finden. Daher entscheide ich mich, die Antwort zu schreiben, um meine Ergebnisse mit anderen zu teilen.

Kurze Antwort: Sie sollten IIS Crypto nicht verwenden, um die Reihenfolge der Cipher Suites festzulegen. Ich empfehle Ihnen, auf die Schaltflächen "Standard" zu klicken, um die zuvor festgelegte Reihenfolge zu entfernen, und dann Gruppenrichtlinien ("Computerkonfiguration" \ "Administrative Vorlagen" \ "Netzwerk" \ "SSL-Konfigurationseinstellungen") zu verwenden, um Cipher Suites über lokale Richtlinien zu konfigurieren.

Der Grund für den Fehler "Nichtübereinstimmung von Protokoll oder Verschlüsselungssuite" kann einer der folgenden sein :

  • Ihr Server unterstützt eine "Bad Cipher Suite".
  • Ihr Server unterstützt keine Verschlüsselungssuite, die gemäß der TLS-Spezifikation unterstützt werden muss.
  • Ihr Server unterstützt HTTP / 2 und verfügt über einige Protokolle aus der schwarzen Liste über den anderen Protokollen, die nicht in der Liste enthalten sind . In der Regel reicht es aus, die Reihenfolge der Cipher Suites zu ändern, um das Problem zu beheben.

Die genaue schwarze Liste kann auf verschiedenen Systemen unterschiedlich sein. Sie können im Internet einige schwarze Liste finden. Beispielsweise enthält Anhang A von RFC 7540 (Hypertext Transfer Protocol Version 2 (HTTP / 2)) eine Liste. Die Cipher Suites sind TLS_RSA_WITH_AES_128_CBC_SHAfür TLS 1.2 (siehe hier ) TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256und TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256für TLS 1.3 (siehe hier ). Das TLS_ECDHE_ECDSA_*ist nur wichtig, wenn Sie ein Zertifikat mit elliptischen Kurven verwenden. Andere sehr gute Cipher Suite TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256ist noch nicht von Microsoft implementiert. Darüber hinaus können Sie in Betracht ziehen, zumindest TLS_ECDHE_RSA_WITH_AES_256_CBC_SHAVerbindungen zur Unterstützung von alten Systemen und TLS_RSA_WITH_AES_128_CBC_SHAsehr alte Systeme (Android 2.3.7, Java 6u45, OpenSSL 0.9.8y) zu unterstützen und TLS_RSA_WITH_3DES_EDE_CBC_SHAnur dann, wenn Sie IE 8 / XP unterstützen müssen. So können Sie zum Beispiel heute verwenden

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

mit deaktiviertem TLS 1.0, TLS 1.1, um eine bessere Sicherheit zu haben oder einfach

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

wenn Sie gute Sicherheit und die beste Leistung benötigen.

Sie können beispielsweise die folgende kurze Verschlüsselungssuite festlegen, um Ihr Problem zu lösen:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

Im Folgenden finden Sie ein Beispiel für die Konfiguration unter Windows 10. Ich habe IIS 10 so konfiguriert, dass es von Qualys SSL Labs mit RSA 2048-Schlüssel und kostenlosem SSL-Zertifikat von Let's Encrypt mit A + bewertet wird .

Geben Sie hier die Bildbeschreibung ein

Ich habe DES 56/56, RC2 128/128, RC2 40/128, RC2 56/128, RC4 128/128, RC4 40/128, RC4 56/128, RC4 64/128, Triple DES 168/168, NULL, deaktiviert. MD5, Multi-Protocol Unified Hello, PCT 1.0, SSL 2.0, SSL 3.0 und TLS 1.0 / 1.1 manuell in der Registrierung (siehe KB245030 ). Ich habe die Protokolle TLS 1.0 und TLS 1.1 nur deaktiviert, weil TLS_FALLBACK_SCSV (Downgrade-Angriff) in IIS bisher nicht verhindert werden kann, was es unmöglich macht, die Bewertung A + von www.ssllabs.com zu erhalten . Ich sehe es als Nachteil, aber TLS 1.2 wird derzeit sehr weit unterstützt. Übrigens können Sie DisabledByDefault: 1aber Enabled: 1für TLS 1.0 und TLS 1.1 verwenden. Es kann hilfreich sein, wenn Sie SQL Server 2008/2012 auf dem Computer ausführen. Der Webserver verwendet nicht TLS 1.0 und TLS 1.1, SQL Server jedoch.

Der wichtigste Schritt, der mir viel Zeit kostet und der Ihr Hauptproblem darstellt, war die Konfiguration der Cipher Suites. Ich habe es mit gemacht gpedit.msc. Ich habe "Computerkonfiguration" \ "Administrative Vorlagen" \ "Netzwerk" \ "SSL-Konfigurationseinstellungen" ausgewählt und den Wert "SSL Cipher Suite Order" wie folgt konfiguriert

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

Die obige Reihenfolge könnte nicht optimal sein und ich bin nicht sicher, ob alle oben genannten Protokolle unter IIS 7.5 unterstützt werden (ich habe IIS 10.0 unter Windows 10 verwendet). Trotzdem bin ich mir sicher, dass Ihr Problem mit der Liste der Cipher Suite zusammenhängt, da ich genau das gleiche Problem hatte, das Sie während meiner Experimente mit der Liste der Cipher Suite beschrieben haben.

In jedem Fall erhalte ich nach dem Konfigurieren der obigen Einstellungen in Group Polity und dem Neustart des Computers ( gpupdate /force /target:computerwas in meinen Tests nicht ausreichte) A + -Bewertungen und die folgende Liste der Testergebnisse des Teils "Handshake-Simulation":

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Man kann sehen, dass iOS für die folgenden Clients erfolgreich unterstützt wird:

Safari 6 / iOS 6.0.1
Safari 7 / iOS 7.1
Safari 8 / iOS 8.4
Safari 9 / iOS 9

Die Clients, die TLS 1.2 nicht unterstützen, scheinen mir jetzt nicht so wichtig zu sein, und ich denke, dass die obige Konfiguration ein guter Kompromiss zwischen der Unterstützung älterer Clients und der Verwendung sicherer Protokolle ist.

Oleg
quelle
+1 für das Beobachten mit IISCrypto, ich habe gesehen, dass es 112-Bit-3DES-Deaktivierungsschlüssel unter Windows falsch eingestellt hat ... besorgt, wenn dieses Tool verwendet wird.
Felickz
0

Wenn Ihr IIS Crypto-Image aktuell ist, behalten Sie die Einstellungen bei, aktivieren Sie jedoch SHA, Diffie-Hellman und PKCS. Dadurch erhalten Sie die A-Bewertung, aber iOS 8 und niedriger können eine Verbindung herstellen.

Persistent13
quelle
Ich habe SHA, Diffie-Hellman und PKCS wie von Ihnen empfohlen aktiviert. Starten Sie den Server neu und überarbeiten Sie den SSL-Labortest. Kein Glück. Ich kann immer noch keine Verbindung mit ios 9 herstellen und bekomme immer noch "Protokoll- oder Verschlüsselungssuite-Nichtübereinstimmung" in SSL Labs.
RobDigital
0

Ich hatte ein paar Tage damit zu kämpfen. Insbesondere stellte ich über Xamarin Forms PCL eine Verbindung von einer iOS-App her, um eine Verbindung zu einem ASP.NET Web Api 2-Restdienst mit OAuth2 Bearer Token-Authentifizierung herzustellen.

Am Ende hat es für mich funktioniert, die Best Practices von IIS Crypto zu verwenden. Bearbeiten Sie dann den Registrierungsschlüssel, den er für die Reihenfolge der Cipher Suite festgelegt hat:

KEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002\Function

Ich hatte Erfolg mit folgendem Wert:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P521, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P521, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P521, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P521,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P521, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P521, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P521, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P521, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P521, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_RC4_128_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_RC4_128_MD5, TLS_RSA_WITH_DES_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

Der letzte wurde mithilfe von Charles Proxy gefunden, der TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 automatisch aushandelte. Die Sache, die mich dazu führte, war, dass die Verbindungen mit Charles Proxy (mit installierten Simulatorzertifikaten) erfolgreich waren, aber ansonsten fehlschlugen. Das Hinzufügen der Suite, die bei der Verhandlung verwendet wurde, hat den Trick getan. Es scheint (?), Dass der Proxy mit meinem Restdienst mit etwas neu verhandelt hat, das von meinem Server unterstützt wurde, aber nicht vom iOS-Client.

Beachten Sie, dass viele der Cipher Suites aus der Spezifikation von ssllabs für bevorzugte Suites für verschiedene iOS / OSX-Geräte stammen. Der obige Wert sollte laut ssllabs mit allem außer IE 6 unter XP per Handshake mit einer A-Bewertung angezeigt werden.

user42134
quelle