iOS10 從2017年1月1日起蘋果不允許我們通過這個(gè)方法跳過ATS,也就是說強(qiáng)制我們用HTTPS础锐,如果不這樣的話提交App可能會(huì)被拒絕。但是我們可以通過NSExceptionDomains來針對(duì)特定的域名開放HTTP可以容易通過審核。)
以前我們是這樣做的
<key>NSAppTransportSecurity</key>
<dict> <key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2017年1月1日以后這個(gè)方法被禁止掉了
一婿屹、使用默認(rèn)的ATS設(shè)置要滿足:
1、https 要基于TLS 1.2或以上版本推溃。
2选泻、證書的加密的算法要至少要SHA256的算法,用至少是2048位的RSA的key 或至少是256位的Elliptic-Curve(ECC)的key所產(chǎn)生的證書
3美莫、加密算法也是有限制页眯,就是ATS中的ForwardSecrecy(超前的密碼保護(hù)算法)配置項(xiàng),需要在以下列表中厢呵,詳見:蘋果文檔窝撵。
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHATLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHATLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
如果不符合上述3各要求,請(qǐng)求接口會(huì)報(bào)錯(cuò):
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
解決辦法
1.開啟https 這個(gè)很簡(jiǎn)單, 搞服務(wù)器的都可以搞定
2.我們需要一個(gè)SSL證書,自建證書達(dá)不到蘋果要求,老板又不肯花錢,只能找找免費(fèi)證書了.
阿里云免費(fèi)證書 ,有效期1年,1年后要不要付費(fèi),誰知道1年后會(huì)怎樣,目前還是通過審核要緊.
https://common-buy.aliyun.com/?commodityCode=cas#/buy
3.按照阿里云設(shè)置域名
4.部署到服務(wù)器上,有點(diǎn)要注意,要求服務(wù)器同事設(shè)置客戶端免證書校驗(yàn),這樣我們方便,客戶端不用設(shè)置證書了.
5.發(fā)現(xiàn)阿里云免費(fèi)證書TLS 1.0 蘋果要求TLS 1.2或以上版本,做以下設(shè)置
<key>NSAppTransportSecurity</key>
<dict> <key>NSExceptionDomains</key> <dict>
<key>xxxx.com</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
大功告成!!