CFNetwork SSLHandshake使用AFNetworking 2.0,自签名cer和[policy setAllowInvalidCertificates:YES]失败

Gab*_*ana 3 ssl-certificate cfnetwork ios afnetworking-2

  • 我正在使用AFNetworking 2.
  • 我的项目Bundle中有一个自签名的根CA证书
  • 我允许使用无效证书: [policy setAllowInvalidCertificates:YES];
  • 我的网址是 https://

因此,从理论上讲,应该接受自签名证书.

AFSecurityPolicy

AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
[policy setAllowInvalidCertificates:YES];
Run Code Online (Sandbox Code Playgroud)

AFHTTPRequestOperationManager

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setResponseSerializer:[AFHTTPResponseSerializer serializer]];
[manager setRequestSerializer:[AFJSONRequestSerializer serializer]];
[manager setSecurityPolicy:policy];

[manager POST:url
   parameters:dictionary
      success:^(AFHTTPRequestOperation *operation, id responseObject) {
          // Process Response Object
          NSLog(@"JSON: %@", [responseObject description]);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        // Handle Error
        NSLog(@"Failure Error: %@", [error description]);
}];
Run Code Online (Sandbox Code Playgroud)

所以没有什么是明显错误的.

我的日志:

2014-04-10 15:05:40.412 https_AF2[5548:3607] CFNetwork SSLHandshake failed (-9800)
2014-04-10 15:05:41.092 https_AF2[5548:3607] CFNetwork SSLHandshake failed (-9800)
2014-04-10 15:05:41.732 https_AF2[5548:3607] CFNetwork SSLHandshake failed (-9800)
2014-04-10 15:05:41.734 https_AF2[5548:3607] NSURLConnection/CFURLConnection HTTP load failed
(kCFStreamErrorDomainSSL, -9800)
2014-04-10 15:05:41.736 https_AF2[5548:60b] Failure Error: Error Domain=NSURLErrorDomain 
Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made."
UserInfo=0x8d6af80 
{NSErrorFailingURLStringKey=https://(myUrl)/userLogin,
NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?,
NSErrorFailingURLKey=https://(myUrl)/userLogin,
NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., 
NSUnderlyingError=0x8cb4920 "An SSL error has occurred and a secure connection to the server cannot be made."}
Run Code Online (Sandbox Code Playgroud)

我能想象的唯一原因是服务器配置不正确.

任何解决这个问题的想法都会很棒!

Gab*_*ana 6

我知道问题是什么.最后问题不在iOS代码中.问题出在我得到的网址上.

URL中的一个小变化解决了所有问题.

从:https://www.domain.com:8080/api/userLogin
https://domain.com/api/userLogin

就如此容易.

我不是要删除这个问题,因为将来某人可能会遇到同样的问题.