2014-03-26 494 views
7

我有一个自签名证书的服务器。我想用https表单将我的设备连接到服务器。我听说我必须接受联系。但我不知道如何。 我有一个自签名证书,因为它是一个测试服务器。但我想用https形式访问它? 当我试着使用HTTPS访问我有一个错误:https与iOS自签名证书

SURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813) 

然后,它是一个自签名的证书。

有人可以帮助我吗?

+0

什么是生成错误信息(虽然进入了通用名值注意)? – binki

回答

18

默认情况下,Cocoa在证书无效时拒绝所有SSL连接。

但是,您可以强制他们接受无效证书。该方法取决于您正在使用的库/框架。例如:

  • 对于NSURLConnection,请检查this answer
  • 对于ASIHTTPRequest,您需要将属性validatesSecureCertificate设置为NO。
  • 对于AFNetworking,您可以检查要使用的代码this page
  • 对于CFNetwork,低级Foundation框架,请检查this sample code
  • 对于您正在使用的SURLConnection,您需要遵循NSURLConnection的相同说明。事实上,SURLConnection只是NSURLConnection的一个子类。

重要提示:
上面的代码,接受任何类型的SSL证书,即使无效,是一个严重的安全隐患。基本上,它使整个SSL无用。因此,如果您确实需要使用SSL连接进行测试,则只应在开发期间使用该代码
另请注意,Apple会拒绝任何提交给接受无效SSL证书的App Store的应用程序。

+0

嗨Qualcuno,谢谢你的回答。但我不使用任何框架/库。我必须吗 ?以及如何将新框架集成到我的应用程序中? – Mcr67

+1

你不可能使用框架。最简单的是NSURLConnection,Cocoa的一部分(内置于系统中),但还有更多。 – Qualcuno

+0

谢谢。如何安装NSURLConnection?路过 ?之后,我该怎么做?可以告诉我吗?谢谢 – Mcr67

2

证书配置:

您必须安装自签名证书CA在设备上,以便信任它 那么只有设备信任的SSL连接的设备。

在安装自签名证书的情况下确保域名URL是相同通用名称证书

如果没有域名,那么IP地址是好的。

证书安装:

你可以只承载它的Web服务器上,并尝试从Safari浏览器访问它,然后iOS版会提示在iOS设备的证书安装

证书创建:

以下是创建自签名证书的方法,以便您可以填写所有详细信息并在Web服务器中托管。

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 1001 -nodes 

+0

您的第二种方法是错误的。当Safari提示您安装证书时,证书安装在Safari中(只有Safari会使用它)。 这意味着在安装之后,您仍然无法在应用中使用连接。最糟糕的是 - 要从Safari中删除证书,您必须重置所有设备的设置(因为〜iOS 7)。 为了正确安装,您应该例如通过电子邮件发送您的证书并在iPhone上打开文件。 – franiis

+0

@franiis - 它将被使用的应用程序以及。试一试 –