在WWDC2016公告中,苹果建议开发商尽快使用ATS协议。该协议是
iOS9和macOS (OS X) 10.11的一个特性。
App Transport Security,即ATS,是苹果公司在iOS 9和Mac OS X 10.11(El Capitan)操作系
苹果指出ATS协议可以防止意外泄露个人信息,以及为应用程序提供默认安全行为。
ATS安全标准的要求
服务器必须启用HTTPS,且TLS版本至少是1.2版本连接加密只允许几种先进的加密算法 证书必须使用SHA256或者更好的哈希算法进行签名,要么是2048位或者更长的RSA密钥,要么就是256位或更长的ECC密钥。
大家可以打开终端输入nscurl --verbose --ats-diagnostics【请求地址】 来检查是否符合ATS要求,如果全部PASS则可以使用
首先给大家普及一下Https 相关知识
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。
客户端相关操作
客户端从iOS 9 SDK起默认开启ATS,一般无需进行代码改造。
如果在plist文件里面修改过App Transport Security Settings-Allow Arbitrary Loads = YES 需要改回为NO。
简单的如果客户端不进行证书的验证只需要将请求更改为https即可,如果设置完之后可以正常访问则可以正常使用。
稍微复杂点的有客户端的单向验证和服务端与客户端的双向验证。
单向认证
使用AFNetworking3.0 网络请求
需要将cer格式证书添加进项目
//AF加上这句和下面的方法
manager.securityPolicy = [self customSecurityPolicy];
#pragma mark 证书验证
- (AFSecurityPolicy*)customSecurityPolicy {
// 证书导入
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"证书名称" ofType:@"cer"];
NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
// 使用证书验证模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// 是否允许证书无效 默认为NO
// 如果是自建证书则设置为YES
securityPolicy.allowInvalidCertificates = NO;
// 是否验证域名 默认为YES 不建议修改
securityPolicy.validatesDomainName = YES;
NSSet *set = [NSSet setWithObjects:certData, nil];
securityPolicy.pinnedCertificates = set;
return securityPolicy;
}
网友评论