Wie richte ich Forward Secrecy in Nginx ein, damit sich die iOS9-App (Xcode7) mit den ATS-Standardeinstellungen mit meinem Server verbinden kann?

Wie richte ich Forward Secrecy in Nginx ein, damit sich die iOS9-App (Xcode7) mit den ATS-Standardeinstellungen mit meinem Server verbinden kann?

Die App Transport Security von iOS9 besagt, dass Verbindungen, die bestimmte Anforderungen nicht erfüllen, fehlschlagen. Nachfolgend sind die Anforderungen aus Apples Dokument aufgeführt (https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html)

  • Der Server muss mindestens das Transport Layer Security (TLS)-Protokoll Version 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 Signatur-Hash-Algorithmus der Stärke SHA256 oder höher und entweder mit einem RSA-Schlüssel der Stärke 2048 Bit oder höher oder einem Elliptic-Curve-Schlüssel (ECC) der Stärke 256 Bit oder höher signiert werden.

Ich habe überprüft, dass mein Server tatsächlich ein Zertifikat mit einem 2048-Bit-RSA-Schlüssel verwendet und mit dem SHA256-Hash-Algorithmus signiert ist. Meine mit Xcode7 erstellte App konnte sich jedoch mit der Standard-ATS-Einstellung nicht mit meinem Server verbinden. Nachdem ich in der App jedoch NSExceptionRequiresForwardSecrecyauf eingestellt hatte , war die Verbindung erfolgreich. Es sieht also so aus, als ob mein Server nicht richtig mit Forward-Secrecy-Chiffren konfiguriert ist. Unten ist meine aktuelle Einstellung in nginx.conf:NOInfo.plist

ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers               'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

Mein Zertifikat wird von Comodo ausgestellt und die Einstellung, die ich oben verwendet habe, stammt auch aus dem Support-Dokument von Comodo (https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/789/37/certificate-installation-nginx).

Laut dem Dokument von Apple werden mit den ATS-Standardeinstellungen folgende Chiffren akzeptiert:

  • 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_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

(Es scheint, dass die SSL_Ciphers-Einstellung meines Nginx diese Chiffren hat.)

Und wenn in den App-Einstellungen NSExceptionRequiresForwardSecrecydies eingestellt ist NO, werden auch folgende Chiffren akzeptiert:

  • LS_RSA_WITH_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_CBC_SHA

Wenn dies auf eingestellt ist NO, stellt meine App erfolgreich eine Verbindung zu meinem Server her, der Grund dafür ist mir jedoch unbekannt.

Meine Frage lautet also: Wie muss ich Nginx für Vorwärtsgeheimnis-Chiffren einrichten, damit die iOS9-App (Xcode7) mit den ATS-Standardeinstellungen erfolgreich eine Verbindung herstellen kann?


AKTUALISIERT:

Ich habe meinen Server neu konfiguriert, indem ich der Anleitung vonhttps://weakdh.org/sysadmin.html. Ich erstelle eine neue DH-Gruppe mit dem folgenden Befehl:

openssl dhparam -out dhparams.pem 2048

und habe es in meine Nginx-Konfiguration eingefügt:

ssl_dhparam dhparams.pem;

Die Verbindung von meiner App schlägt jedoch weiterhin fehl. Das nsurl --ats-diagnosticsTool zeigt weiterhin an, dass das Problem durch Forward Secrecy verursacht wird.


Für Diagnosezwecke ist unten dieSSL-TestScreenshot der Ergebnisseite meines Servers bereitgestellt vonAbonnieren:

Bildbeschreibung hier eingeben

verwandte Informationen