6
votes

I develop an iPhone framework which sends HTTPS requests in order to communicate with a publicly available backend server. Currently I have a big problem regarding untrusted server certificates.

The certificate of the backend server is not signed by a trusted CA, so my first approach was to use NSURLRequest's private allowsAnyHTTPSCertificateForHost. While this worked as expected and was fine as temporary workaround, our customer demands a clean solution as final result. Therefore I wrote a method which allows to install a provided certificate from the file system in the keychain, but this method does not work as expected in the iPhone Simulator. The certificate is installed in the host machine's Mac OS X keychain instead. Unfortunately, if I call NSURLConnection's sendSynchronousRequest method, I retrieve an "untrusted server certificate" error. It seems as if NSURLConnection is not able to access the host's Mac OS X keychain to retrieve the certificate.

Is my guess correct or did I miss something?

Would my approach work if I ran my app on a real iPhone device instead (I do not have one available yet)?

Does there exist a keychain in the iPhone Simulator at all?

Is it at all possible to send HTTPS requests to a server with an untrusted certificate on the iPhone Simulator or do I have to use precompiler directives to implement different routines depending on the underlying platform (simulator or device, respectively)?

Any help is highly appreciated.

Thanks, Matthias

3

3 Answers

2
votes

You can get free trusted SSL certificates at http://startssl.com

0
votes

Perhaps the ASIHTTPRequest library can help with that?

0
votes

Yes agree with Beat Bolli but i have done this by NSURL request.may be you are skipping spmething.