使用自签名SSL证书连接到HTTPS
问题描述:
我在使用SSL连接到服务器时遇到问题。我正在使用ASIHTTPRequest。使用自签名SSL证书连接到HTTPS
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”签名。
所以我通过电子邮件将证书发送给自己,在我的设备上点击使用邮件应用程序的附件 - 它将我重定向到设置并安装了证书。当然,因为它是自签名的,它告诉我证书不可信,但它是证书唯一的问题,它没有过期等。
现在我采用同样的方法,我再次收到“连接故障发生:SSL问题(可能是一个坏/到期/自签名证书)”或404
我还添加了证书,我的项目,加上下面几行:
NSData* certData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"cert" ofType:@"cer"]];
SecCertificateRef cert = SecCertificateCreateWithData(NULL, (CFDataRef)certData);
[request setClientCertificates:[NSArray arrayWithObject:(id)cert]];
,但它不什么都不会改变。
我错过了什么吗?
答
我会使用类似Firefox的REST客户端插件来从浏览器执行相同的POST。查看网站真正返回的内容。它可能只是404是服务器对指定URL的正确响应,而无效证书只是阻止SSL协商完成,因此您从不会看到错误。
你能推荐任何好的?其中一些人表示他们不会在Firefox 4.0b7上工作。顺便说一句,我敢肯定,API使用http和https完全相同。 – 2010-11-21 08:43:51
由于兼容性问题,我还没有升级到FF 4,所以我不知道'REST Client'是否可以使用它。插件的名称是'REST Client'。我最近认为,在开发中使用自签名证书实际上是浪费金钱。在我使用自签名证书工作的每个项目上,花费数小时的开发人员时间解决与他们有关的问题。我现在向我的客户推荐他们只是花几百美元购买真正的证书,并为开发人员消除了另一个障碍。 – 2010-11-22 03:06:01
如果你有证书的私钥,你可能会自己签名,我相信你可以配置WireShark来解密SSL流量。这可以帮助您确切了解您的连接上发生了什么。 – 2010-11-22 03:09:16