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

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

Problem:Unsere mobile App kann keine sichere Verbindung mehr zu unserem Webdienst 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 deaktiviert.

Schlüssel RSA 2048 Bit (z. B. 65537)

Aussteller: DigiCert SHA2 Secure Server CA

Signaturalgorithmus SHA512mitRSA

Dies sind die App-Transportsicherheitsanforderungen:

Der Server muss mindestens Transport Layer Security (TLS) Protokollversion 1.2 unterstützen. Verbindungschiffren sind auf solche beschränkt, die Vorwärtsgeheimnis bieten (siehe die Liste der Schiffern unten). Zertifikate müssen mit einem SHA256- oder besseren Signatur-Hash-Algorithmus signiert sein, entweder mit einem 2048-Bit- oder größeren RSA-Schlüssel oder einem 256-Bit- oder größeren Elliptic-Curve-(ECC)-Schlüssel. Ungültige Zertifikate führen zu einem Hard-Fehler und keiner Verbindung. Dies sind die akzeptierten Schiffern:

TLS_ECDHE_ECDSA_MIT_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_MIT_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_MIT_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_MIT_AES_256_CBC_SHA TLS_ECDHE_ECDSA_MIT_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_MIT_AES_128_CBC_SHA TLS_ECDHE_ECDSA_MIT_AES_128_CBC_SHA TLS_ECDHE_RSA_MIT_AES_256_GCM_SHA384 TLS_ECDHE_RSA_MIT_AES_128_GCM_SHA256 TLS_ECDHE_RSA_MIT_AES_256_CBC_SHA384 TLS_ECDHE_RSA_MIT_AES_128_CBC_SHA256 TLS_ECDHE_RSA_MIT_AES_128_CBC_SHA

Was wurde versucht:

  1. Das Hinzufügen von Ausnahmen in der mobilen App, um unsere Domäne zuzulassen, funktioniert, aber ich möchte diese ungesicherte Methode nicht verwenden, sondern unser SSL reparieren.
  2. GebrauchtIIS-Kryptoum „Best Practice“ zu verwenden, habe „PCI“ und benutzerdefinierte Setups ausprobiert. Habe sogar versucht, die Krypto-Suite auf die obige Liste zu ändern und neu zu ordnen. Nach jedem Versuch wird der Server neu gestartet undSSL-Laborewurde ausgeführt (nachdem der Cache geleert wurde). Ich konnte die Bewertung von F auf A und sogar A- verbessern, was jedoch nur dazu führte, dass iOS 8 und 9 keine sicheren Verbindungen herstellen konnten. (NSURLErrorDomain Code=-1200 und _kCFStreamErrorCodeKey=-9806) Bildbeschreibung hier eingeben
  3. VM wiederhergestellt und ein Powershell-Skript ausprobiertRichten Sie Ihren IIS für SSL Perfect Forward Secrecy und TLS 1.2 einIch habe sogar einen zweiten Versuch unternommen, bei dem ich die Chiffren aus dem Power-Skript entfernt und eine minimale Liste dessen erstellt habe, was erforderlich ist.

Ergebnisse:Immer ähnlich, Bewertungen von A oder A-. iOS8 und iOS9 können keine sichere Verbindung herstellen. Handshake-Simulation führt zu „Protokoll- oder Verschlüsselungssammlungskonflikt“ für Safari- und iOS-Produkte. Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

AKTUALISIERENNachdem wir mit dem Apple-Support zusammengearbeitet hatten, haben wir einige Paketverfolgungsaufzeichnungen 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 SYN - SYN-ACK - ACK-Dreiwege-Handshake, der die TCP-Verbindung einrichtet. Das vierte Paket ist iOS, das Ihrem Server eine TLS-Client-Hello-Nachricht sendet, der erste Schritt zum Einrichten einer TLS-Verbindung über diese TCP-Verbindung. Ich habe diese Nachricht auseinandergenommen und sie sieht ganz vernünftig aus. Im fünften Paket trennt der Server einfach die Verbindung (indem er ein RST sendet).

Weiß jemand, warum IIS 7.5 ein RST durchführt?

Antwort1

Die Frage ist alt, wird aber bei der Suche gefunden. Ich habe einige Zeit damit verbracht, eine Lösung für dasselbe Problem zu finden. Daher habe ich beschlossen, 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 „Standards“ zu klicken, um die zuvor festgelegte Reihenfolge zu entfernen, und dann die Gruppenrichtlinie („Computerkonfiguration“ \ „Administrative Vorlagen“ \ „Netzwerk“ \ „SSL-Konfigurationseinstellungen“) zu verwenden, um die Cipher Suites über die lokale Richtlinie zu konfigurieren.

Der Fehler "Protokoll- oder Cipher Suite-Mismatch" kann einer der folgenden Gründe haben:

  • Ihr Server unterstützt einige „schlechte Verschlüsselungssammlungen“
  • Ihr Server unterstützt einige Verschlüsselungssammlungen nicht, die jedoch unterstützt werden MÜSSEN und der TLS-Spezifikation entsprechen.
  • Ihr Server unterstützt HTTP/2 und verfügt über einige Protokolle aus demdie schwarze Liste überdie anderen Protokolle, die nicht in der Liste sindNormalerweise reicht es aus, die Reihenfolge der Verschlüsselungssammlungen zu ändern, um das Problem zu beheben.

Die genaue schwarze Liste kann auf verschiedenen Systemen unterschiedlich sein. Sie können im Internet einige schwarze Listen finden. Zum Beispiel:Anhang Avon RFC 7540 (Hypertext Transfer Protocol Version 2 (HTTP/2)) enthält eine Liste. Die Cipher Suites sind TLS_RSA_WITH_AES_128_CBC_SHAfür TLS 1.2 (sieheHier) und TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256für TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS 1.3 (sieheHier). Das TLS_ECDHE_ECDSA_*ist nur wichtig, wenn Sie Zertifikate mit elliptischen Kurven verwenden. Andere sehr gute Cipher-Suiten TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256sind von Microsoft noch nicht implementiert. Zusätzlich können Sie erwägen, mindestens TLS_ECDHE_RSA_WITH_AES_256_CBC_SHAdie Unterstützung für Verbindungen von alten Systemen und TLS_RSA_WITH_AES_128_CBC_SHAdie Unterstützung für sehr alte Systeme (Android 2.3.7, , Java 6u45, OpenSSL 0.9.8y) hinzuzufügen und TLS_RSA_WITH_3DES_EDE_CBC_SHAnur, wenn Sie Unterstützung für IE 8 / XP benötigen. So können Sie heute beispielsweise 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.1um mehr 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 beste Leistung benötigen.

Um Ihr Problem zu lösen, können Sie beispielsweise den folgenden kurzen Satz von Verschlüsselungssammlungen festlegen:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

Nachfolgend finden Sie ein Beispiel für die Konfiguration unter Windows 10. Ich habe IIS 10 so konfiguriert, dassA+-Bewertung von Qualys SSL Labs mit RSA 2048-Schlüssel und kostenlosem SSL-Zertifikat von Let’s Encrypt.

Bildbeschreibung hier eingeben

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, MD5, Multi-Protocol Unified Hello, PCT 1.0, SSL 2.0, SSL 3.0 und TLS 1.0/1.1 deaktiviert.manuell in der Registrierung(sehenKB245030). Ich habe die Protokolle TLS 1.0 und TLS 1.1 nur deaktiviert, weil TLS_FALLBACK_SCSV (Downgrade-Angriff) in IIS bis jetzt nicht verhindert werden kann, was es unmöglich macht, eine A+-Bewertung zu erhaltenwww.ssllabs.com. Ich sehe es als Nachteil, aber TLS 1.2 wird derzeit sehr breit unterstützt. Übrigens können Sie verwenden DisabledByDefault: 1, aber Enabled: 1für TLS 1.0 und TLS 1.1. Es könnte hilfreich sein, wenn Sie SQL Server 2008/2012 auf dem Computer ausführen würden. Der Webserver verwendet TLS 1.0 und TLS 1.1 nicht, SQL Server jedoch schon.

Der wichtigste Schritt, der viel Zeit in Anspruch nimmt und Ihr Hauptproblem darstellt, war die Konfiguration der Cipher Suites.Ich habe es mit gemacht gpedit.msc. Ich habe "Computerkonfiguration" \ "Administrative Vorlagen" \ "Netzwerk" \ "SSL-Konfigurationseinstellungen" gewä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 ist möglicherweise nicht optimal und ich bin nicht sicher, ob alle oben genannten Protokolle von IIS 7.5 unterstützt werden (ich habe IIS 10.0 von Windows 10 verwendet). Trotzdem bin ich sicher, dass Ihr Problem mit der Liste der Cipher Suite zusammenhängt, da ich bei meinen Experimenten mit der Liste der Cipher Suite genau das gleiche Problem hatte wie Sie beschrieben.

In jedem Fall, nachdem Sie die obigen Einstellungen in Group Polity konfiguriert haben undNeustart des Computers( gpupdate /force /target:computerwar in meinen Tests nicht genug) Ich erhalte die Bewertung A+ und die folgende Liste der Testergebnisse des Teils „Handshake-Simulation“:

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

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, erscheinen mir derzeit nicht so wichtig und ich denke, dass die obige Konfiguration einen guten Kompromiss zwischen der Unterstützung von Legacy-Clients und der Verwendung sicherer Protokolle darstellt.

Antwort2

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

Antwort3

Ich hatte ein paar Tage lang damit zu kämpfen. Insbesondere habe ich mich von einer iOS-App aus mit Xamarin Forms PCL mit einem ASP.NET Web API 2-Rest-Dienst mit OAuth2 Bearer Token-Authentifizierung verbunden.

Was bei mir letztendlich funktioniert hat, war die Verwendung der Best Practices von IIS Crypto. Bearbeiten Sie dann den Registrierungsschlüssel, der für die Reihenfolge der Verschlüsselungssammlung festgelegt wurde:

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

Mit folgendem Wert hatte ich Erfolg:

TLS_ECDHE_RSA_MIT_AES_128_GCM_SHA256,TLS_ECDHE_RSA_MIT_AES_128_CBC_SHA,TLS_ECDHE_RSA_MIT_AES_256_CBC_SHA384_P521,TLS_ECDHE_RSA_MIT_AES_256_CBC_SHA384_P384,TLS_ECDHE_RSA_MIT_AES_256_CBC_SHA384_P256,TLS_ECDHE_RSA_MIT_AES_256_CBC_SHA_P521,TLS_ECDH E_RSA_MIT_AES_256_CBC_SHA_P384,TLS_ECDHE_RSA_MIT_AES_256_CBC_SHA_P256,TLS_ECDHE_RSA_MIT_AES_128_CBC_SHA256_P521,TLS_ECDHE_RSA_MIT_AES_128_CBC_SHA256_P384,TLS_ECDHE_RSA_MIT_AES_128_CBC_SHA256_P256,TLS_ECDHE_RSA_MIT_AES_128_CBC_SHA_P521,TLS_ECDHE_ RSA_MIT_AES_128_CBC_SHA_P384,TLS_ECDHE_RSA_MIT_AES_128_CBC_SHA_P256,TLS_RSA_MIT_AES_256_GCM_SHA384,TLS_RSA_MIT_AES_128_GCM_SHA256,TLS_RSA_MIT_AES_256_CBC_SHA256,TLS_RSA_MIT_AES_256_CBC_SHA,TLS_RSA_MIT_AES_128_CBC_SHA256,TLS_RSA_MIT_AES_128_CB C_SHA,TLS_RSA_MIT_3DES_EDE_CBC_SHA,TLS_ECDHE_ECDSA_MIT_AES_256_GCM_SHA384_P521,TLS_ECDHE_ECDSA_MIT_AES_256_GCM_SHA384_P384,TLS_ECDHE_ECDSA_MIT_AES_128_GCM_SHA256_P521,TLS_ECDHE_ECDSA_MIT_AES_128_GCM_SHA256_P384,TLS_ECDHE_ECDSA_MIT_AES_128_GCM_SH A256_P256,TLS_ECDHE_ECDSA_MIT_AES_256_CBC_SHA384_P521,TLS_ECDHE_ECDSA_MIT_AES_256_CBC_SHA384_P384,TLS_ECDHE_ECDSA_MIT_AES_256_CBC_SHA_P521,TLS_ECDHE_ECDSA_MIT_AES_256_CBC_SHA_P384,TLS_ECDHE_ECDSA_MIT_AES_256_CBC_SHA_P256,TLS_ECDHE_ECDSA_MIT_AES _128_CBC_SHA256_P521,TLS_ECDHE_ECDSA_MIT_AES_128_CBC_SHA256_P384,TLS_ECDHE_ECDSA_MIT_AES_128_CBC_SHA256_P256,TLS_ECDHE_ECDSA_MIT_AES_128_CBC_SHA_P521,TLS_ECDHE_ECDSA_MIT_AES_128_CBC_SHA_P384,TLS_ECDHE_ECDSA_MIT_AES_128_CBC_SHA_P256,TLS_DHE_RSA_WI TH_AES_256_GCM_SHA384,TLS_DHE_RSA_MIT_AES_128_GCM_SHA256,TLS_DHE_DSS_MIT_AES_256_CBC_SHA256,TLS_DHE_DSS_MIT_AES_256_CBC_SHA,TLS_DHE_DSS_MIT_AES_128_CBC_SHA256,TLS_DHE_DSS_MIT_AES_128_CBC_SHA,TLS_DHE_DSS_MIT_3DES_EDE_CBC_SHA,TLS_RSA_MIT_RC4_128_ SHA,TLS_ECDHE_ECDSA_MIT_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_MIT_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_MIT_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_MIT_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_MIT_AES_256_CBC_SHA,TLS_RSA_MIT_RC4_128_MD5,TLS_RSA_MIT_DES_CBC_SHA,TLS_ECDHE_RSA_MIT_AES_128_GCM_SHA256

Der letzte Fehler wurde mithilfe von Charles Proxy gefunden, der TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 automatisch aushandelte. Der Grund dafür war, dass die Verbindungen mit eingeschaltetem Charles Proxy (mit installierten Simulatorzertifikaten) erfolgreich waren, andernfalls aber fehlschlugen. Das Hinzufügen der Suite, die es bei der Aushandlung verwendete, hat den Trick getan. Es scheint(?), dass der Proxy mit meinem Rest-Dienst mit etwas neu verhandelte, das von meinem Server unterstützt wurde, aber nicht vom iOS-Client.

Beachten Sie, dass viele der Verschlüsselungssammlungen aus der Spezifikation bevorzugter Sammlungen von ssllabs für verschiedene iOS/OSX-Geräte stammen. Der obige Wert sollte mit allem außer IE 6 unter XP kompatibel sein.laut ssllabs mit der Bewertung A.

verwandte Informationen