AFN NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9806)

本文介绍了当iOS应用因加密协议不统一导致无法与服务端建立连接时的两种解决方案,以及如何处理服务端使用自签名证书时出现的数据请求错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一,  加密协议不统一

     iOS 9之后默认的加密协议是TLSv1.2,目前有些服务端仍然使用的是TLSv1.0,这样就会因为协议不统一而造成应用端与服务端不能建立连接,并报错:Error Domain=NSURLErrorDomain Code=-1200

    解决方法有两种:

    第一种方法 : 从应用端修改

    右击plist文件 -> Open As -> Source Code,在其中加入如下代码:                     

        <key>域名</key>
  	<dict>
  		<key>NSIncludesSubdomains</key>
  		<true/>
  		<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
  		<true/>
  		<key>NSExceptionMinimumTLSVersion</key>
  		<string>TLSv1.0</string>
  		<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
  		<false/>
  	</dict>

      第二种方法 : 从服务端修改

      让服务端将加密协议从TLSv1.0或者TLSv1.1改为TLSv1.2       

二, 服务端使用了签名证书

    服务端如果使用了未经第三方机构认证的证书,使用afn请求数据时会报错:NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9806)

    将服务端的三个证书,选择其中一个(例如.crt或者.pem)放在本地双击打开会被添加到钥匙串,从钥匙串导出后缀为.cer的文件,然后拖入到项目中. 打开 Build Phases -> Copy Bunld Resources 查看证书是否已经绑定,如果没有点击 + 号绑定证书.完成后,在请求数据的地方加入Security的设置:

AFSecurityPolicy * securityPolicy  = [AFSecurityPolicypolicyWithPinningMode:AFSSLPinningModeCertificate];  
    securityPolicy.allowInvalidCertificates = YES;  
    securityPolicy.validatesDomainName = NO;  
    manager.securityPolicy = securityPolicy; 

完成后,重新运行即可.

转载于:https://my.oschina.net/Kuture/blog/968274

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值