Problème: notre application mobile ne peut plus établir de connexion sécurisée avec notre service Web, car iOS 9 utilise désormais ATS.
Contexte: iOS 9 introduit la sécurité du transport d'application
Configuration du serveur: Windows Server 2008 R2 SP1 (VM) IIS 7.5, certificats SSL de Digicert. Pare-feu Windows désactivé.
Clé RSA 2048 bits (e 65537)
Émetteur DigiCert SHA2 Secure Server CA
Algorithme de signature SHA512withRSA
Ce sont les exigences de sécurité du transport d'application:
Le serveur doit prendre en charge au moins le protocole TLS (Transport Layer Security) version 1.2. Les chiffrements de connexion sont limités à ceux qui fournissent le secret de retransmission (voir la liste des chiffrements ci-dessous.) Les certificats doivent être signés à l'aide d'un algorithme de hachage de signature SHA256 ou supérieur, avec une clé RSA de 2048 bits ou plus ou une clé elliptique de 256 bits ou plus. (ECC). Les certificats non valides entraînent une défaillance matérielle et aucune connexion. Ce sont les chiffres acceptés:
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
Ce qui a été essayé:
- Ajouter des exceptions dans l'application mobile pour permettre à notre domaine de fonctionner, mais je ne veux pas utiliser cette méthode non sécurisée, je veux corriger notre SSL.
- Utilisé IIS Crypto pour utiliser les «meilleures pratiques», essayé «pci» et les configurations personnalisées. J'ai même essayé de modifier la suite de chiffrement pour la liste ci-dessus et de la réorganiser. Après chaque tentative, le serveur est redémarré et SSL Labs a été exécuté (après avoir effacé le cache). J'ai réussi à passer d'une note F à une note A, voire A-, mais cela n'a permis qu'à iOS 8 et 9 de ne pas pouvoir établir de connexions sécurisées. (Code NSURLErrorDomain = -1200 et _kCFStreamErrorCodeKey = -9806)
- VM restaurée et essayé un script powershell Configurer votre IIS pour SSL Perfect Forward Secrecy et TLS 1.2 J'ai même fait une deuxième tentative où j'ai édité les cyphers du script d'alimentation pour une liste minimale de ce qui est requis.
Résultats: Toujours similaires, notes de A ou A-. iOS8 et iOS9 ne peuvent pas négocier de connexion sécurisée. La simulation de prise de contact entraîne une «non-concordance de protocole ou de suite de chiffrement» pour les produits Safari et iOS.
MISE À JOUR Après avoir travaillé avec le support Apple, nous avons fait une capture de trace de paquet:
$ 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
Les trois premiers paquets sont la poignée de main classique à trois voies SYN - SYN-ACK - ACK qui établit la connexion TCP. Le quatrième paquet est iOS envoyant à votre serveur un message Bonjour client TLS, la première étape de la configuration d'une connexion TLS sur cette connexion TCP. J'ai séparé ce message et il semble assez raisonnable. Dans le cinquième paquet, le serveur abandonne simplement la connexion (en envoyant un RST).
Est-ce que quelqu'un sait pourquoi IIS 7.5 ferait un RST?