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

Schreibe einen Kommentar