2010-11-19 8 views
2

Ich habe ein Problem bei der Verbindung mit dem Server über SSL. Ich verwende ASIHTTPRequest.Verbinden mit dem HTTPS mithilfe eines selbstsignierten SSL-Zertifikats

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"https://server:port"]]; 
//[request setValidatesSecureCertificate:NO]; 
[request setRequestMethod:@"POST"]; 
[request setTimeOutSeconds:10]; 

[request addRequestHeader:@"Host" value:@"server:port"];  
[request addRequestHeader:@"Content-Type" value:@"text/json; charset=utf-8"]; 

Oben gibt mir die "Ein Verbindungsfehler aufgetreten: SSL-Problem (möglicherweise ein schlechtes/abgelaufenes/selbstsigniertes Zertifikat)". Wenn ich die Zeile auskommentiere [request setValidatesSecureCertificate: NO]; Ich bekomme 404.

Ich weiß, dass in der Entwicklungsumgebung der Server das selbstsignierte Zertifikat verwendet, auf dem Produktionsserver wird das Zertifikat von "thawte" signiert.

Also habe ich das Zertifikat per E-Mail an mich selbst geschickt, tippen Sie auf den Anhang mit der Mail-App auf meinem Gerät - es leitete mich zu den Einstellungen und ich installierte das Zertifikat. Natürlich, da es selbstsigniert ist, sagt es mir, dass das Zertifikat nicht vertrauenswürdig ist, aber es ist das einzige Problem mit dem Zertifikat, es ist nicht abgelaufen usw.

Jetzt mache ich den gleichen Ansatz und ich bekomme wieder entweder "Eine Verbindung Fehler aufgetreten: SSL Problem (möglicherweise ein schlechtes/abgelaufen/selbst signiertes Zertifikat)“oder 404.

ich habe auch das Zertifikat zu meinem Projekt hinzugefügt und fügen sie folgende Zeilen:

NSData* certData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"cert" ofType:@"cer"]]; 

SecCertificateRef cert = SecCertificateCreateWithData(NULL, (CFDataRef)certData); 
[request setClientCertificates:[NSArray arrayWithObject:(id)cert]]; 

aber es doesn ändere nichts.

Fehle ich etwas?

Antwort

0

Ich würde etwas wie das REST-Client-Addon für Firefox verwenden, um den identischen POST von einem Browser zu tun. Um zu sehen, was die Website wirklich zurückgibt. Es kann nur sein, dass ein 404 die richtige Antwort vom Server für die angegebene URL ist und das ungültige CERT verhindert, dass die SSL-Verhandlung abgeschlossen wird, sodass Sie den Fehler nie sehen.

+0

Konnten Sie irgendein gutes empfehlen? Einige von ihnen sagen, dass sie nicht mit Firefox 4.0b7 arbeiten werden. Und außerdem bin ich mir sicher, dass die API mit http und https genauso funktioniert. –

+0

Ich habe aufgrund von Kompatibilitätsproblemen nicht auf FF 4 aktualisiert, daher weiß ich nicht, ob 'REST Client' damit arbeitet oder nicht. Der Name des Addons ist 'REST Client'. Ich bin in letzter Zeit der Meinung, dass die Verwendung selbstsignierter Zertifikate in der Entwicklung tatsächlich eine Verschwendung von Geld ist. Bei jedem Projekt, an dem ich mit selbstsignierten Zertifikaten gearbeitet habe, hat es mehrere Stunden Entwicklerzeit gekostet, um Probleme mit ihnen zu lösen. Ich empfehle jetzt meinen Kunden, dass sie nur die paar hundert Dollar für ein echtes Zertifikat aufbringen und eine weitere Hürde für Entwickler beseitigen. –

+0

Wenn Sie den privaten Schlüssel des Zertifikats haben, was Sie wahrscheinlich tun, da es selbst signiert ist, glaube ich, dass Sie WireShark so konfigurieren können, dass der SSL-Datenverkehr entschlüsselt wird. Das könnte Ihnen helfen, genau herauszufinden, was auf Ihrer Verbindung passiert. –

Verwandte Themen