我在使用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]];
但它不会改变任何东西。
我错过了什么吗?
答案 0 :(得分:0)
我会使用像Firefox的REST客户端插件这样的东西从浏览器执行相同的POST。要查看该网站真正返回的内容。它可能是404是服务器对指定URL的正确响应,无效证书只是阻止SSL协商完成,所以你永远不会看到错误。