iOS 网络请求/图片加载 报错 NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)

2020年12月25日13:31:43记录。

      上周为公司APP更新一个版本,发测试后,测试提出一个bug,在iOS13.3上,网络图片加载不出来,在用测试机 iPhone11,版本13.3真机调试的时候,控制台输出入下:

巨坑.png

然后又用 iPhone11 14.1版本与iPhone 6P 12.6 真机调试,结果发现,在这2种版本上可以加载出来,网络请求正常。当时的感觉是,


因为可以定位是证书问题,所以直奔证书,只要找到证书哪个环节出现问题,就能对症下药。

然后就在网上到处搜索,竟然没有搜索到怎么检查证书的方法。最后只能去Apple开发的官方文档中搜关键字,查看文档HTTPS Server Trust Evaluation

方法如下:

打开终端: 输入命令 openssl  回车

敲入命令: s_client -connect www.baidu.com:443 

然后返回结果如下:


只要把后面的域名与端口换成自己的就可以查看证书是否有错误或者过期了。

本人造成的原因是因为 证书颁发机构的根证书过期了。


然后联系运维,让他重新上传证书,再测试,问题解决。

其实网上也有另一种跳过证书信任的方法,就是在NSURLSession的代理中添加如下方法:

~~~

- URLSession:(NSURLSession *)sessiontask:(NSURLSessionTask *)taskdidReceiveChallenge:(NSURLAuthenticationChallenge *)challengecompletionHandler:(void(^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler{

        if(challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust) {

           NSURLCredential *credntial = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];

           completionHandler(NSURLSessionAuthChallengeUseCredential,credntial);

        }

}

~~~

但是治标不治本,所以不建议这么做。

感谢大佬的文章,让我找到了支撑 链接在此 Sectigo AddTrust根证书过期引发的https请求失败问题

你可能感兴趣的:(iOS 网络请求/图片加载 报错 NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843))