Verwenden Sie ein selbstsigniertes SSL-Zertifikat in einer iPhone App
Ich entschuldige mich im Voraus für die langwierige Frage. Ich habe Probleme mit einem selbst-signierten SSL-Zertifikat und ich will zu dokumentieren alles, was ich bisher ausprobiert habe.
Arbeite ich an einer app, die Kommunikation mit einem REST-Dienst. Der test-server verwendet ein selbst signiertes ssl-Zertifikat, das kann ich auf meinem computer installieren, ohne Frage. Es ist eine .p12-Datei, die ein Kennwort erfordert, um zu installieren. Ohne dieses Zertifikat installiert ist, werden alle Anfragen an den server zurückgeben 403.
Den .p12 installiert drei Einträge in der Keychain, einen "Root certificate authority", "test-user" - Zertifikat, ausgestellt von der "Root certificate authority", und einem privaten Schlüssel, der im Zusammenhang mit der "test user" cert.
Habe ich installiert dieses Zertifikat auf meinem iPad per E-Mail an mich .p12-Datei. Ich tippte auf die Anlage, geben Sie das Passwort, und jetzt kann ich den Zugriff auf die Website in Safari. Leider, weil der Anwendungs-sandboxing, das ist nicht genug, um meine app zum kommunizieren mit dem REST-service.
Ich bin mit ASIHTTPRequest für alle die Kommunikation mit dem REST-service von meiner app. Jede Anfrage ist eine Unterklasse von ASIHTTPRequest. Die erste Sache, die ich gefunden, die ich anrufen musste [self setValidatesSecureCertificate:NO];
so, dass es einmal den Versuch, die SSL-Verbindung zum server. Wenn das alles ist, ich dies, bekomme ich 403 Fehler-codes vom Dienst zurück.
Jetzt kann ich nicht scheinen, um herauszufinden, wie man die Anfrage auf das Zertifikat verwenden. Ich habe versucht, den Export der drei Elemente als separate .cer-Datei, die Sie in das Projekt und fügen Sie diese in die Anfrage mit dem nachstehenden code:
NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"cert" ofType:@"cer"]];
SecCertificateRef cert = SecCertificateCreateWithData(NULL, (CFDataRef)data);
...
[self setClientCertificates:[NSArray arrayWithObjects:(id)cert, ..., nil]];
Während der code ausgeführt, ohne Frage, mit diesem Ansatz, ich bekomme immer noch den Fehler 403.
Habe ich sogar versucht, einschließlich die .p12-Datei in meine Anwendung importieren und es mit dem gleichen code. Dies schlägt fehl, da SecCertificateCreateWithData
gibt es nil zurück.
Ich gebe zu, ich weiß nicht wirklich, was ich hier mache. Das ist alles ein wenig über meinen Kopf und jede Hilfe, jemand könnte geben, mir würde sehr geschätzt werden.
InformationsquelleAutor der Frage Jose Ibanez | 2011-05-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK, ich fand es heraus. Ich war irgendwie auf dem Holzweg.
Die wichtigsten Informationen, die ich fand, war in der Apple-Dokumentation für Certificate, Key, and Trust Services Programming Guideinsbesondere die "Aufgaben für iOS" - Seite. Eine ausführliche Anleitung zum extrahieren der Sicherheit, Identität aus der .p12-Datei und zum hinzufügen von Vertrauen Ausnahme.
Das Letzte Stück des Puzzles war in ASIHTTPRequest-Dokumentation Client-Zertifikat-Unterstützung. Mithilfe der Identität, die ich extrahiert direkt aus der p12-Datei, ich war in der Lage zu gehen, dass Sie sich auf die Anfrage und erhalten Sie alles ordnungsgemäß authentifiziert.
Ich hoffe, dies hilft jemand anderes, das zu implementieren hat eine ähnliche Funktion.
InformationsquelleAutor der Antwort Jose Ibanez