我设置了#34;允许任意负载"与"是" ,但是HTTP加载失败(kCFStreamErrorDomainSSL,-9806)

时间:2017-09-10 16:21:24

标签: ios ssl nsurlsession

我的项目info.plist中有以下设置:

<key>NSAppTransportSecurity</key>
<dict>
      <key>NSAllowsArbitraryLoads</key>
        <true/>
</dict>

但仅使用沃达丰移动数据仍然出现以下错误:

  

NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9806)   错误详细信息:错误域= NSURLErrorDomain代码= -1200&#34;发生SSL错误,无法建立与服务器的安全连接。&#34; UserInfo = {_ kCFStreamErrorCodeKey = -9806,NSLocalizedRecoverySuggestion =您是否还要连接到服务器?,NSUnderlyingError = 0x17004dfb0 {错误域= kCFErrorDomainCFNetwork代码= -1200&#34;(null)&#34; UserInfo = {_ kCFStreamPropertySSLClientCertificateState = 0,_kCFNetworkCFStreamSSLErrorOriginalValue = -9806,_kCFStreamErrorDomainKey = 3,_kCFStreamErrorCodeKey = -9806}},NSLocalizedDescription =发生SSL错误,无法建立与服务器的安全连接。,NSErrorFailingURLKey = https://v1.xyz.net:8080/signup/, NSErrorFailingURLStringKey = https://v1.xyz.net:8080/signup/,_ kCFStreamErrorDomainKey = 3}

  • 更新 这是我的代码:

    NSString *jsonRequest=@"JSON";
    NSURL *baseURL = [NSURL URLWithString:@"https://v1.xyz.net:8080/signup/"];
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    configuration.requestCachePolicy=NSURLRequestReloadIgnoringLocalCacheData;
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setHTTPMethod:@"POST"];
    [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
    NSData *postData = [NSJSONSerialization JSONObjectWithData:[jsonRequest dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
    [request setURL:baseURL];
    [request setHTTPBody:postData];
    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        if (!error) {
            NSDictionary *responseObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
            NSLog(@"%@",responseObject);
        } else {
            // error code here
            NSLog(@"Error %@",error);
        }
    }];
    [postDataTask resume];
    

2 个答案:

答案 0 :(得分:1)

问题来自移动运营商,他们通过端口8080阻止了https,因此我们将端口更改为使用标准https端口443并且运行良好。

我们使用以下步骤来调查此问题:

1-检查我们的服务器证书: $ openssl s_client -connect https://v1.xyz.net:8080/signup/

2-使用nscurl工具诊断ATS连接问题: / usr / bin / nscurl --ats-diagnostics --verbose https://v1.xyz.net:8080/signup/

答案 1 :(得分:-1)

只需禁用ATS,您可以通过打开Info.plist按照以下步骤操作,并添加以下行:

<key>NSAppTransportSecurity</key> 
<dict> <key>NSAllowsArbitraryLoads</key> <true/>
</dict>

如果仍然存在同样的问题,则服务器上的证书未经授权CA签名。所以有这种问题的人检查证书在服务器端是否有效。