iOS学习之旅10 ATS(App Transport Security)对HTTPS协议要求引起的问题

问题描述

编写以下代码获取网络某个资源的MIMEType

 1 -(void)getMIMEType
 2 {
 3     //路径
 4     NSURL *url = [NSURL URLWithString:@"https://www.baidu.com/img/bd_logo1.png"];
 5     //请求对象
 6     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
 7     NSOperationQueue *queue = [[NSOperationQueue alloc]init];
 8     [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
 9         NSLog(@"%@",response.MIMEType);
10     }];
11 }

运行提示如下错误:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802),同时请求返回的结果为nil

问题解析

ATS要求

因为苹果在iOS9引入隐私保护功能ATS(App Transport Security)屏蔽HTTP协议,在学习过程中遇到HTTP相关问题,因此写了这篇文章 iOS学习之旅7 ATS安全功能屏蔽HTTP协议,但今天又遇到ATS上的问题。

在iOS 9.0及以后版本和OS X10.11及以后版本编译的应用中,所有使用NSURLConnection、 CFURL、或 NSURLSession的连接都使用ATS默认行为。ATS不遵守以下要求的连接将会失败并断开。

  • 服务器必须至少支持传输层安全(TLS)协议版本1.2。
  • 连接的密码仅限于提供完全正向保密的密码(perfect forward secrecy)。(参见下面的密码列表)
  • 证书必须使用SHA256哈希算法或更好的签名哈希算法进行签名,使用2048位或更高的RSA密钥,或者256位或更高的Elliptic-Curve (ECC)密钥。否则无效的证书会导致连接失败并断开。

以下是可接受的密码:
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

完全正向保密(perfect forward secrecy)

查了下资料,完全正向保密(perfect forward secrecy)要求一个密钥只能访问由它所保护的数据;不能使用保护数据传输的密钥派生其他密钥。此外,也不能使用保护数据传输的密钥的源派生其他密钥;一个密钥被破解, 并不影响其他密钥的安全性。确保密钥的长期保密材料不会影响来自以前通信的已交换密钥的保密性。

“TLS” 自然是指TLS协议。 “ECDHE” 是说使用带有短暂性密钥的椭圆曲线Diffie-Hellman密钥交换(也就是说要为每个会话创建新密钥并且事后也不会记下来)。“RSA”表明用 RSA 非对称加密保护TLS握手的安全。 “AES_128_CBC” 是说在密码块链接模式中用带有128位密钥的AES 非对称加密保护真正的数据交换。最后的 “SHA” 表明用 SHA 安全哈希算法。

问题解决

时间: 2024-08-02 02:51:11

iOS学习之旅10 ATS(App Transport Security)对HTTPS协议要求引起的问题的相关文章

IOS开发系列(6)App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

在学习网络处理的过程,发现代码都没错,运行时却发生以下警告: App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file. 问题分析: 应用程序采取了明文HTTP协议(http:/ /).而在iOS9 中,苹果引入了一项隐私

iOS 9使用HTTP(App Transport Security问题)

Use http on iOS 9 在iOS 9中 苹果将原http协议改成了https协议 使用 TLS1.2 SSL加密请求数据 使用xcode 7为iOS 9开发应用 如果直接访问"http:// ... "会出现错误信息: App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be con

apue和unp的学习之旅10——基本udp套接字编程

使用UDP编写的一些常见的应用程序有:DNS(域名系统),NFS(网络文件系统),SNMP(简单网络管理协议). //---------------------------------1.recvfrom函数和sendto函数---------------------------------- #include <sys/socket.h> ssize_t  recvfrom(int sockfd, void* buff, size_t nbytes, int flags, struct so

【iOS】App Transport Security

iOS9中新增App Transport Security(简称ATS)特性, 主要使到原来请求的时候用到的HTTP,都转向TLS1.2协议进行传输.这也意味着所有的HTTP协议都强制使用了HTTPS协议进行传输. 错误信息如下: App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configur

iOS App 不支持http协议 App Transport Security has blocked a cleartext HTTP (http://)

目前iOS已经不支持http协议了,不过可以通过info.plist设置允许 App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

IOS开发 App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app&#39;s Info.plist file.

xcode自7后不再使用http,而是使用https请求,但目前很多网络请求还只是以http请求,我们可以这样解决 info.plist->添加@“App Transport Security Settings”字段->添加“Allow Arbitrary Loads”字段,并将对应的value值设置为@“YES” IOS开发 App Transport Security has blocked a cleartext HTTP (http://) resource load since it

关于App Transport Security的更新,中英文对照 --Xcode 7 --iOS9

章节都为本人定义,无抄袭,其中英文部分内容为官方文档摘抄以及自己总结,翻译的不好,敬请指正 App Transport Security(暂且翻译为app传输安全) What is ATS? App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. ATS prevents accidental disclosure, provid

关于iOS9中的App Transport Security相关说明及适配(转)

原文:http://my.oschina.net/vimfung/blog/494687 iOS9中新增App Transport Security(简称ATS)特性, 主要使到原来请求的时候用到的HTTP,都转向TLS1.2协议进行传输.这也意味着所有的HTTP协议都强制使用了HTTPS协议进行传输.原文如下: App Transport Security App Transport Security (ATS) enforces best practices in the secure co

关于iOS9中的App Transport Security相关说明及适配

iOS9中新增App Transport Security(简称ATS)特性, 主要使到原来请求的时候用到的HTTP,都转向TLS1.2协议进行传输.这也意味着所有的HTTP协议都强制使用了HTTPS协议进行传输.原文如下: App Transport Security App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. AT