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:
- 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.
- 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)
- 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.
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?