美文网首页
iOS网络层的安全

iOS网络层的安全

作者: 傲阁燃 | 来源:发表于2016-11-09 21:25 被阅读0次

保证网络请求之来自于规定的APP

采用设计签名来保证网络请求的API来自于自己的APP。
具体做法如下:
客户端密钥+API名字+API请求参数进行多次hash(如MD5加密)
服务端按照同样的算法计算一个hash同客户端的hash进行比较。

我们这里采用加盐,然后加密,然后乱序,然后再回炉加密的方式提高安全性。

保证数据传输的安全性

  • 敏感型数据采用多次hash密文传送
  • 网络请求尽量使用https(需要证书申请,服务器配置,性能优化,客户端配置需要投入精力)

HTTPS的介绍

HTTPS就是将HTTP协议数据包放到SSL和TCP/IP层组成IP数据去传输,以此保证传输数据的安全;对于接收端就是在SSL/TSL里的数据包进行解析,然后将数据传输到HTTP层。
在这里我们先了解一些概念:

  • SSL/TCL运行机制的概述
    SSL/TCL能解决三大风险

(1)信息都是加密传播,第三方无法窃听
(2)具有校验机制
(3)配备身份证书

基本的运行过程

SSL/TSL采用公钥加密算法。客户端像服务端索要公钥,客户端利用公钥加密,然后服务端利用自己的私钥解密。
SSL/TSL协议的基本过程:

(1)客户端像服务端索要公钥,并验证公钥
(2)在每一次session对话时生成对话密钥(session key)
(3)客户端和服务端使用(session key)加密之后的信息进行通信

SSL/TCL的握手阶段

  • 客户端发送请求(ClientHello)

支持的协议版本
客户端生成的随机数,用于生成"对话密钥"
支持的加密算法(一般是RSA公钥加密)
支持的压缩方法

  • 服务器回应

确认使用的加密通信协议版本
一个服务端生成的随机数,用于生成"对话密钥"
支持的加密算法
支持的压缩算法

  • 客户端回应
    一般客户端验证服务器证书,若证书合法则客户端从合法证书中服务器提取公钥。然后客户端像服务端发送信息

发送用服务器公钥加密的随机数,防止第三方窃听
发送使用双方商定的加密方法和密钥进行通信的通知
客户端握手结束通知

  • 服务器的最后回应
    服务器接收到客户端的使用公钥加密的随机数之后,生成本次的“对话密钥”,然后回应客户端如下信息

发送使用双方商定的加密方法和密钥进行通信的通知
服务器握手结束通知

经历以上四步则TSL/SSL整个握手全阶段结束,然后客户端和服务端进行加密通信。

SSL/TCL通过四次握手主要交换以下:

  • 数字证书
  • 用于生成对话密钥的三个随机数
  • 商定加密通信方式

重点介绍一下数字证书

数字证书一般包括一下信息:

持有者的信息
公钥
保证证书有效的数字签名

HTTPS使用的可以是SSL证书也可以是自签名证书(不过APP审核可能会被拒绝)。证书是由服务端提供的,这里只赘述如何在xcode中配置ssl证书以及如何建立https连接。

把服务端给的证书直接拖入到项目中即可。
在AFNetworking中支持https

- (AFSecurityPolicy*)customSecurityPolicy
{
    // /先导入证书
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"https" ofType:@"cer"];//证书的路径
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    
    // AFSSLPinningModeCertificate 使用证书验证模式
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    
    // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
    // 如果是需要验证自建证书,需要设置为YES
    securityPolicy.allowInvalidCertificates = NO;
    
    //validatesDomainName 是否需要验证域名,默认为YES;
    //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
    //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
    //如置为NO,建议自己添加对应域名的校验逻辑。
    securityPolicy.validatesDomainName = YES;
    
    securityPolicy.pinnedCertificates = [NSSet setWithObject:certData];
    return securityPolicy;
}
在网络请求的地方调用:
[_sessionManager setSecurityPolicy:[self customSecurityPolicy]];

这里是基于最新版AFN的源码

相关文章

  • iOS网络层的安全

    保证网络请求之来自于规定的APP 采用设计签名来保证网络请求的API来自于自己的APP。具体做法如下:客户端密钥+...

  • iOS网络层设计-Engine 实现

    iOS 网络层设计 iOS网络层设计-Client 实现 iOS网络层设计-Engine 实现 iOS 网络层 E...

  • iOS网络层设计-Client 实现

    iOS 网络层设计 iOS网络层设计-Client 实现 iOS网络层设计-Engine 实现 iOS 网络层 C...

  • 谈谈 iOS 网络层设计

    谈谈 iOS 网络层设计 谈谈 iOS 网络层设计

  • iOS-AFN

    博文参考iOS开发之网络层探索iOS安全策略之HTTPS Github Demo AFN头文件信息

  • 网络安全-------防止被抓包

    1.Ios应用网络安全之https 安全套接字层 (Secure Socket Layer, SSL) 是用来实现...

  • IOS三层/四层架构

    ios三层/四层架构是什么: ios三层架构主要是,网络层,逻辑层,UI层。 ios四层架构主要是,网络层,数据层...

  • 防火墙和网闸

    防火墙:(网络层) 防火墙工作在网络层,存在被劫持和复用的风险。 重点保证网络层安全的边界安全工具。为了内网的安全...

  • iOS搭建Socket服务器的相关方法

    iOS网络编程层次 iOS网络编程层次结构也分为三层: Cocoa层:NSURL,Bonjour,Game Kit...

  • 网络层安全认知

    Apsara Clouder云安全专项技能认证:网络层安全认知 网络层安全认知认证旨在帮助学员理解云计算环境下网络...

网友评论

      本文标题:iOS网络层的安全

      本文链接:https://www.haomeiwen.com/subject/ozezuttx.html