iOS学习iOS开发技术分享iOS开发攻城狮的集散地

iOS-Https适配

2016-12-28  本文已影响323人  吃屁的小栗子

在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;
}
上一篇下一篇

猜你喜欢

热点阅读