使用自签名SSL证书连接到HTTPS

时间:2010-11-19 13:24:51

标签: iphone ssl certificate asihttprequest

我在使用SSL连接服务器时遇到问题。我正在使用ASIHTTPRequest。

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"];

上面给出了“发生连接失败:SSL问题(可能是错误/过期/自签名证书)”。如果我取消注释该行[request setValidatesSecureCertificate:NO];我得到404。

我知道在开发环境中服务器使用自签名证书,在生产服务器上证书由“thawte”签名。

所以我通过电子邮件将证书发送给自己,使用我设备上的Mail应用程序点击附件 - 它将我重定向到设置并安装了证书。当然,因为它是自签名的,它告诉我证书不受信任,但它是证书的唯一问题,它没有过期等。

现在我采用相同的方法,我再次收到“发生连接失败:SSL问题(可能是错误/过期/自签名证书)”或404。

我还将证书添加到我的项目中并添加以下行:

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

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

但它不会改变任何东西。

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

我会使用像Firefox的REST客户端插件这样的东西从浏览器执行相同的POST。要查看该网站真正返回的内容。它可能是404是服务器对指定URL的正确响应,无效证书只是阻止SSL协商完成,所以你永远不会看到错误。