Mit NSURLRequest versuche ich auf eine Website mit einem abgelaufenen Zertifikat zuzugreifen. Wenn ich die Anfrage sende, wird meine Delegiertenmethode connection: didFailWithError mit den folgenden Informationen aufgerufen:
%Vor%Meine Suchen haben nur eine Lösung gefunden: eine versteckte Klassenmethode in NSURLRequest:
%Vor%Ich möchte jedoch aus offensichtlichen Gründen keine privaten APIs in einer Produktions-App verwenden.
Irgendwelche Vorschläge, was zu tun ist? Muss ich CFNetwork APIs verwenden und wenn ja, zwei Fragen:
BEARBEITEN:
iPhone OS 3.0 hat eine unterstützte Methode eingeführt, um dies zu tun. Weitere Details finden Sie hier: Wie NSURLConnection zu verwenden Verbindung mit SSL für ein nicht vertrauenswürdiges Zertifikat herstellen?
iPhone OS 3.0 hat eine unterstützte Methode eingeführt, die keine CFNetwork-APIs auf niedrigerer Ebene erfordert. Mehr Details hier:
Die unterstützte Vorgehensweise erfordert die Verwendung von CFNetwork. Sie müssen einen kCFStreamPropertySSLSettings an den Stream anhängen, der kCFStreamSSLValidatesCertificateChain == kCFBooleanFalse angibt. Im Folgenden finden Sie einen kurzen Code, der dies tut. Abzüglich der Überprüfung auf gültige Ergebnisse wird die Bereinigung hinzugefügt. Sobald Sie dies getan haben, können Sie CFReadStreamRead () verwenden, um die Daten abzurufen.
%Vor%Wenn es sich um einen internen Server für Testzwecke handelt, warum importieren Sie nicht einfach das Zertifikat des Testservers in den KeyChain und setzen Sie benutzerdefinierte Vertrauenseinstellungen?
Ich habe das gleiche Problem - Ich habe einen SOAP-Client entwickelt, und der Dev-Server hat ein "homegrown" -Zertifikat. Ich konnte das Problem selbst mit dieser Methode nicht lösen, da ich nicht NSURL verwendete, sondern die (schlecht dokumentierten und scheinbar aufgegebenen) WS-Methoden, und entschied mich vorerst, (intern) nur eine Nicht-SSL zu verwenden Verbindung.
Nachdem Sie jedoch gesagt haben, dass Ihnen die Frage in den Sinn kommt, wenn Sie nicht bereit sind, eine private API in einer Produktions-App zu verwenden, sollten Sie den Zugriff auf eine Website mit einem zweifelhaften Zertifikat zulassen?
Ich zitiere Jens Alfke :
Das ist nicht nur ein theoretisches Sicherheitsproblem. Etwas wie 25% der öffentlichen DNS-Server wurden kompromittiert Aktuelle Berichte und können Benutzer sogar zu Phishing- / Malware- / Anzeigen-Websites leiten wenn sie den Domainnamen richtig eingeben. Das einzige, was dich schützt Von diesem ist die SSL-Zertifikatsüberprüfung.
Können Sie ein selbstsigniertes Zertifikat erstellen und Ihre benutzerdefinierte Zertifizierungsstelle den vertrauenswürdigen Zertifizierungsstellen hinzufügen? Ich bin nicht ganz sicher, wie das auf dem iPhone funktionieren würde, aber ich würde annehmen, dass Sie unter Mac OS X diese zum Schlüsselbund hinzufügen würden.
Sie könnten auch in diesem Beitrag interessiert sein Re: Wie mit einem schlechten Zertifikat Fehler umgehen in NSURLDownload
Tags und Links objective-c cocoa networking