网络安全——防止被抓包

1.IOS应用网络安全之https安全套接字层 (Secure Socket Layer, SSL) 是用来实现互联网安全通信的最普遍的标准 。Web 应用程序使用 HTTPS(基于 SSL 的 HTTP),HTTPS 使用数字证书来确保在服务器和客户端之间进行安全、加密的通信 。在 SSL 连接中,客户机和服务器在发送数据之前都要对数据进行加密,然后由接受方对其进行解密 。
当浏览器(客户端)需要与某个安全站点建立连接时,先建立TCP连接(三次握手),然后再发生 SSL会话握手:
浏览器将通过网络发送请求安全会话的消息(通常请求以 https 而非 http 开头的 URL) 。
服务器通过发送其证书(包括公钥)进行响应 。
浏览器将检验服务器的证书是否有效,并检验该证书是否是由其证书位于浏览器的数据库中的(并且是可信的)CA 所签发的 。它还将检验 CA 证书是否已过期 。
如果证书有效,浏览器将生成一个==一次性的、唯一的==会话密钥,并使用服务器的公钥对该会话密钥进行加密 。然后,浏览器将把加密的会话密钥发送给服务器,这样服务器和浏览器都有一份会话密钥 。
服务器可以使用其专用密钥对消息进行解密,然后恢复会话密钥 。
握手之后,即表示客户端已验证了 Web 站点的身份,并且只有该客户端和 Web 服务器拥有会话密钥副本 。从现在开始,客户机和服务器便可以使用该会话密钥对彼此间的所有通信进行加密 。这样就确保了客户机和服务器之间的通信的安全性 。
上面是一般也是应用最普遍的单向验证方式,由浏览器(客户端)来验证服务端的合法性;其实也可以做双向验证,服务器也可以验证浏览器(客户端)的合法性,不过一般使用在银行业务上,比如U盾之类 。我们现在关注普遍的单向验证方式的应用 。
2. iOS移动开发HTTPS应用现状当下绝大部份的移动互联网项目都采用HTTP、HTTPS协议作为前后端的数据接口协议 。而iOS开发群体中,绝大部分都在项目中应用了第三方开源的HTTP请求框架AFNetworking来快速而高效的开发,毕竟快鱼吃慢鱼的时代嘛 。AFNetworking请求HTTP接口简直是简单得不能再简单了 。只不过从iOS9.0开始需要设置Info.plist中App Transport Security打开非HTTP的资源加载,因为Apple默认只允许采用经过权威证书颁发机构签名的证书的HTTPS站点的访问,一切是为了安全 。安全 。安全 。那么我们重点来分析采用HTTPS协议的后台接口的一般使用方式: HTTPS的服务器配置的证书分两大类,一类是经过权威机构签名颁发的证书,这样证书通常是要花钱买服务的,当然现在也有少数机构提供免费的证书签名服务 。另一类就是服务器配置的是研发人员自己签名生成的证书 。
① 200多本网络安全系列电子书
② 网络安全标准题库资料
③ 项目源码
④ 网络安全基础入门、linux、web安全、攻防方面的视频
⑤ 网络安全学习路线
⑥ 私信“安全”即可免费领取

网络安全——防止被抓包

文章插图
 
3.AFN调用使用权威机构颁发证书的HTTPS接口现在AFNetworking框架已经修复了上半年爆出的SSL中间人攻击漏洞,并强烈要求开发者使用公钥绑定或者证书绑定的安全策略,那么正确使用AFNetworking请求这类证书的HTTPS站点代码很简单如下:
AFSecurityPolicy*policy=[AFSecurityPolicypolicyWithPinningMode:AFSSLPinningModePublicKey];policy.validatesDomainName=YES;AFHTTPSessionManager*manager=[AFHTTPSessionManagermanager];manager.securityPolicy=policy;manager.requestSerializer.cachePolicy=NSURLRequestReloadIgnoringLocalCacheData;
对于这类证书的站点,Info.plist都不需要设置,因为已经是权威机构颁发的证书了,我们只需要设置验证绑定方式和验证域名以防止中间人攻击,毕竟申请证书是花了钱(现在也有免费的申请,比如WoSign),省事一点 。
4.AFN调用使用我们自己签名证书的HTTPS接口对于使用我们自己签名的证书来说,浏览器打开web站点也会默认阻止访问,除非用户手动把该站点加入信任列表,这个手动加入的过程其实就是不去验证服务器的合法性,任性的认为服务器是可信赖的 。那么手动加入信任列表,这样会导致证书的验证过程压根没发生,虽然可以成功访问目标服务器返回我们需要的数据,其实,这中间很有可能返回的数据不是正真的目标服务器返回的数据,也可能是网络传输中间的第三者伪装返回的数据 。传输的数据被人窃取甚至篡改都是很可能的 。
4.1 不正确的做法浏览器手动加入自签名站点到信任列表这个操作的功能相当于iOS开发中AFNetworking的API的如下做法:


推荐阅读