2013-11-26 25 views
3

我将Apache服务器使用的.cer证书放在Xcode项目中。当应用程序试图说服服务器我得到这个错误在Xcode:无法在AFNetworking中使用自签名证书2

Assertion failure in id AFPublicKeyForCertificate(NSData *__strong)(), 
/Users/../ProjectName/AFNetworking/AFSecurityPolicy.m:52 
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'Invalid parameter not satisfying: allowedCertificate' 

这里是调用服务器的代码:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
[self setSecurityPolicy:[AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]]; 
[manager POST:@"https://www.example.com/" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { 
//success 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
//failure 
}]; 

我改变了钉扎模式,没有运气AFSSLPinningModeCertificate。

,当我删除此行:

[self setSecurityPolicy:[AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]]; 

服务器与错误提示信息:

"The operation couldn't be completed. (NSURLErrorDomain error -1012.)" 

的证书使用OpenSSL创建的,我甚至试图从startssl如果一个免费的证书。 com

至于Apache服务器端,这里是虚拟主机配置:

# My custom host 
<VirtualHost *:443> 
    ServerName www.example.com 
    DocumentRoot "/path/to/folder" 
    SSLEngine on 
    SSLCipherSuite HIGH:!aNULL:!MD5 
    SSLCertificateFile /path/to/www.example.com.cer 
    SSLCertificateKeyFile /path/to/www.example.com.key 
    <Directory "/the/directory/"> 
     Options Indexes FollowSymLinks Includes ExecCGI 
     AllowOverride All 
     Require all granted 
    </Directory> 
    ErrorLog "logs/mysite.local-error_log" 
</VirtualHost> 

和服务器不听443端口

回答

0

的问题是不是AFNetworkings的一面,但在iOS“:您需要在设备上安装的自签名证书,因为iOS的安全设置禁止连接到不受信任的来源。

您可以通过在iOS设备上打开证书(将邮件发送给自己并打开它)并按照安装说明来添加自签名证书作为可信来源。

+0

这就是我'怀疑,因为我已经使用了iOS模拟器 – Carpsen90

0

如果需要,您可以通过更改安全策略来禁用无效证书检查。

[self setAllowInvalidCertificates:YES]; 

请阅读更多的文档中:http://cocoadocs.org/docsets/AFNetworking/2.0.3/Classes/AFSecurityPolicy.html#//api/name/allowInvalidCertificates

您也可以固定证书:http://cocoadocs.org/docsets/AFNetworking/2.0.3/Classes/AFSecurityPolicy.html#//api/name/pinnedCertificates

+0

一直会在iOS模拟器这项工作? ,因为我仍然在AFSecurityPolicy.m上得到这样的错误:52:'无效的参数不令人满意:allowedCertificate' – Carpsen90

9

它看起来像你的证书文件是不正确的格式。你的代码没有这些行(AFURLConnectionOperation/pinnedPublicKeys):

SecCertificateRef allowedCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)data); 
NSParameterAssert(allowedCertificate); 

我有同样的错误(在AFNetworking 1.1,但版本不应该的问题),当我的证书看起来像这样:

-----BEGIN CERTIFICATE----- 
.. 
-----END CERTIFICATE----- 

我管理由证书转换为X509格式,使用命令从this answer来解决此问题:

openssl x509 -in adn.crt -outform der -out "adn.der" 

后来我改名adn.der返回adn.cer('.cer'似乎是AFNetworking的预期扩展名),现在一切正常。