AFNetworking SSL证书失败 iOS

4

我花了很多时间寻找答案,但仍然没有运气,所以我决定放弃并请求社区帮助:

1 我有一个使用自签名证书的开发服务器

2 是的,我确实使用了 policy.allowInvalidCertificates = YES;

3 SSL 在自定义端口 44302 上

4 我需要运行下载任务,因为请求返回数据流

这是我的代码:

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
policy.allowInvalidCertificates = YES;
manager.securityPolicy = policy;

NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"https://self_signed_cert.net:44302/storage/%@/action.download", _ticketId]];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"%@ %@", response, responseObject);
    }
}];
[dataTask resume];

以下是错误信息:

2015-08-03 18:18:15.901 SSL_TEST[1517:23943] 错误:错误 Domain=NSURLErrorDomain Code=-1200 "发生了 SSL 错误,无法建立安全连接到服务器。" UserInfo=0x787d2f20 {NSLocalizedDescription=发生了 SSL 错误,无法建立安全连接到服务器。, NSLocalizedRecoverySuggestion=是否仍要连接服务器?, _kCFStreamErrorCodeKey=-9806, NSErrorFailingURLStringKey=https://self_signed_cert.net:44302/storage/a430f316cfe076e9850874c0edad3dcb/action.download, _kCFStreamErrorDomainKey=3, NSUnderlyingError=0x787da700 "操作无法完成。(kCFErrorDomainCFNetwork 错误 -1200。)", NSErrorFailingURLKey=https://self_signed_cert.net:44302/storage/a430f316cfe076e9850874c0edad3dcb/action.download}

感谢您的帮助!谢谢。


1
你解决了你的问题吗?我也遇到了同样的问题... - Raphaël Pinto
我们将上传和下载转移到了http,但它仍然无法正常工作,抱歉。 - itworksinua
1个回答

0

我在一个空项目上尝试过,在应用程序上可以工作:

NSURL* lBaseURL = [NSURL URLWithString:@"https://myDomain/"];
    AFHTTPSessionManager* lSessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:lBaseURL
                                              sessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];


    AFSecurityPolicy* lPolicy= [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    lPolicy.allowInvalidCertificates = YES;

    lSessionManager.securityPolicy = lPolicy;


    [lSessionManager GET:@"https://myDomain/api/"
              parameters:nil
                 success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull JSON)
     {
         NSLog(@"success %@", JSON);
     }
                 failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error)
     {
         NSLog(@"failure %@", error);
     }];
  • 不要忘记在应用和手表应用中添加.cer文件到你的目标
  • 将ATS激活到.plist NSAppTransportSecurity

但是,我卡在了watchOS 2.0扩展上。它就是以这种错误失败的:

Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, NSErrorFailingURLKey=https://myDomain/api, _kCFStreamErrorCodeKey=-9802, NSErrorFailingURLStringKey=https://myDomain/api, NSErrorClientCertificateStateKey=0, _kCFStreamErrorDomainKey=3, NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made.}


也许您应该将 .cer 文件添加到您的扩展中? - itworksinua
我忘了提到我已经做了。 - Raphaël Pinto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接