使用自签名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协商完成,因此您从不会看到错误。

+0

你能推荐任何好的?其中一些人表示他们不会在Firefox 4.0b7上工作。顺便说一句,我敢肯定,API使用http和https完全相同。 – 2010-11-21 08:43:51

+0

由于兼容性问题,我还没有升级到FF 4,所以我不知道'REST Client'是否可以使用它。插件的名称是'REST Client'。我最近认为,在开发中使用自签名证书实际上是浪费金钱。在我使用自签名证书工作的每个项目上,花费数小时的开发人员时间解决与他们有关的问题。我现在向我的客户推荐他们只是花几百美元购买真正的证书,并为开发人员消除了另一个障碍。 – 2010-11-22 03:06:01

+0

如果你有证书的私钥,你可能会自己签名,我相信你可以配置WireShark来解密SSL流量。这可以帮助您确切了解您的连接上发生了什么。 – 2010-11-22 03:09:16