Wie SSL-Zertifikate vergleichen mit AFNetworking
In meiner iPhone-app verwende ich eine https
Verbindung mit einem selbst signierten SSL
Zertifikat herunterladen sensiblen Daten (Benutzername und Passwort) von einem server.
Diese app ist nur für den privaten Gebrauch, es ist nicht gemeint für die Produktion.
Ich bin mit AFNetworking
zu verwalten, die https
- Verbindung, aber, da mein Zertifikat nicht signiert von einer ZERTIFIZIERUNGSSTELLE, um zu machen, Arbeit, die ich hatte, um die folgenden in den header AFURLConnectionOperation
Klasse:
#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ 1
Aber mit dieser meine app ermöglicht es jedem Zertifikat.
Gibt es eine Möglichkeit, dass nur das Zertifikat von meinem server vielleicht Bündelung es in die app und vergleicht Sie mit dem Zertifikat des Servers in die https-Verbindung?
Und wenn es möglich wäre, gäbe es irgendeinen signifikanten Vorteil in Bezug auf Sicherheit?
Ich bin sehr neu in Sicherheit und ich bin irgendwie verwirrt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Begriff, den Sie suchen, ist SSL-Pinning, wo die app überprüft, ob eine bekannte Zertifikat oder public-key-Spiele vorgestellt, die von einem remote-server.
AFNetworking unterstützt sowohl pinning mit Zertifikate oder public keys. Müssen Sie den Zertifikat(en) oder public key(s) zu Ihrem app-Bundle, und aktivieren Sie die Funktion, indem Sie entweder die
defaultSSLPinningMode
Eigenschaft auf AFHttpClient oder dieSSLPinningMode
Eigenschaft aufAFURLConnectionOperation
.Können Sie die pin mit
AFSSLPinningModePublicKey
oderAFSSLPinningModeCertificate
.AFSSLPinningModeCertificate
bedeutet, dass das server-Zertifikat genau übereinstimmen muss, einer von denen, die in das bundle.AFSSLPinningModePublicKey
ist mehr liberal und bedeutet, dass das Zertifikat des Servers übereinstimmen muss für jeden öffentlichen Schlüssel in das Bündel, eine öffentliche Schlüssel-Zertifikate im bundle.Gibt es eine Beispiel für die Einstellung der pinning-Modus in der AppDotNet Beispiel.
Error Domain=NSURLErrorDomain Code=-1012 "The operation couldn’t be completed. (NSURLErrorDomain error -1012.)" UserInfo=0x7157d40
die header-Datei sagt, dass das Zertifikat sein soll .cer kann dies das problem sein?.crt file
zu.cer file
: terminal Öffnen und den folgenden Befehl ausführen.openssl x509 -in www.mydomain.com.crt -out www.mydomain.com.cer -outform der
Zu erweitern ein wenig auf Davids Antwort mit Bezug auf
AFSSLPinningModePublicKey
versusAFSSLPinningModeCertificate
. Im Idealfall würden Sie die pin der öffentliche Schlüssel und nicht das Zertifikat. Das ist, weil einige Websites und Dienste, wie Google, drehen Ihre Zertifikate, die alle 30 Tage oder so. Aber Sie re-zertifizieren die gleichen öffentlichen Schlüssel.Die Zertifikate sind Häufig gedreht, um die Größe der CRL-small für mobile clients. Aber Sie re-Zertifizierung der öffentlichen Schlüssel (anstatt ein neues zu erstellen), damit Schlüssel für die Kontinuität testen.
Public-key-pinning ist der Grund, warum tools wie Certificate Patrol verfehlen. Das Zertifikat wird erwartet, um zu ändern, wird der öffentliche Schlüssel nicht.
Public-key-pinning ist ein viel wie der SSH
StrictHostKeyChecking
, wenn Sie mit ihm vertraut.OWASP hat eine Zuschreibung auch bei Zertifikat und Public-Key-Pinning.