美文网首页
HTTPS请求报错Error Code=-999 "cancel

HTTPS请求报错Error Code=-999 "cancel

作者: Sun大圣 | 来源:发表于2018-11-19 11:27 被阅读0次

    今天早上刚到公司, 听到一个恶讯, 线上App所有的请求都请求错误了。公司主要的域名下的网络访问全部出问题了, 但是仅仅是iOS端有问题, 安卓设备用户依然可以正常访问。

    因为并不是用户手动进行网络请求取消操作的, 所以此原因排除。还有种可能就是HTTPS的证书问题。经过一系列查证后, 发现公司的SSL证书失效了, 导致此问题。

    因为本项目使用的AFN进行网络请求的, 所以以下这个方法导致了请求被取消。

    /**

    Whether or not the specified server trust should be accepted, based on the security policy.

    This method should be used when responding to an authentication challenge from a server.

    @param serverTrust The X.509 certificate trust of the server.

    @param domain The domain of serverTrust. If `nil`, the domain will not be validated.

    @return Whether or not to trust the server.

    */

    - (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust  forDomain:(nullable NSString *)domain;

    证书无效后, 上面方法返回NO, 从而执行

    disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;

    最终导致, 当前的请求被cancel。

    解决方案

    1.及时将有效的证书部署于所使用的环境中。

    2.通过plist文件中设置App Transport Security Settings中的参数, 比如Allow Arbitrary Loads 或者白名单。

    3.对AFN中的参数设置, 允许不进行证书验证, 来规避 evaluateServerTrust: forDomain:方法的验证不通过的问题。

            //解决证书失效交易发动失败的问题

            AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];

            securityPolicy.validatesDomainName=NO;

            securityPolicy.allowInvalidCertificates=YES;

            manager.securityPolicy= securityPolicy;

    最好的解决方案是及时将有效的证书部署于所使用的环境中。如果你的应用不涉及到过多的安全或者不重视此问题, 也可以在苹果没有硬性要求ATS之前通过后面的两个方法来规避。不过, 从苹果之前对ATS的要求情况来看, 也不是长久之计。

    原文:错误: HTTPS请求报错Error Code=-999 "cancelled" - DCSnail-蜗牛 - CSDN博客

    相关文章

      网友评论

          本文标题:HTTPS请求报错Error Code=-999 "cancel

          本文链接:https://www.haomeiwen.com/subject/aswpsttx.html