iOS-网络安全之HTTPS
iOS-网络安全之HTTPS
一: 中间人攻击
概念
- 经常会提到的就是中间人攻击
Man-in-the-middle attack(MITM)- 攻击者插入到原本直接通信的双方之间,双方已为还在直接跟对方通信,但实际是通过了攻击者这个中间人,信息会被它获取或篡改
时机
- HTTPS在建立了TCP链接后,会进行SSL握手来校验证书,写上加密密钥.
- 所以一般中间人攻击分为
- SSL链接建立前的攻击
- HTTPS传输中的攻击
常见攻击
a. SSL证书欺骗攻击
较为常见的攻击
通过ARP欺骗,DNS劫持甚至网管劫持,将客户端访问重定向到攻击者的服务器.让客户端与攻击者的机器建立HTTPS(伪造的证书)链接.
浏览器会提示证书不可信,用户不点击继续浏览就能避免被劫持.
- 防范措施
- iOS原生
- 使用系统API建立HTTPS链接就没问题的,系统默认是没有信任相关伪造证书的不会SSL握手成功
- WebView
- 如果忽略证书校验的话可能会被劫持
- iOS原生
b. SSL剥离攻击(SSLSTrip)
将HTTPS链接降级为HTTP链接
客户端直接访问HTTPS链接,攻击者是无法进行降级的
攻击的主要方式是利用用户不会每次都会输入HTTPS://xxxx.xxx.com这样的链接来访问网站
- 防范措施
- 原生
- 无法劫持App内部HTTPS会话
- WebView
- 如果在全网HTTPS的情况下,可以对打开的链接做检查
- 原生
c. 针对SSL算法进行攻击
上述两种攻击一般只能影响到WebApp,很难攻击到NativeApp.
牛逼的Hacker会对SSL算法相关的漏洞进行攻击,密码学相关了…
- 防范措施
- 最好对服务端的SSL/TLS配置进行升级
- 只支持尽量高版本的TLS(最低TLSv1)
- 禁用一些已经爆出安全隐患的加密方法
- 使用2048位的数字证书
- 最好对服务端的SSL/TLS配置进行升级
二: 打保证书校验
本地打保证书进App,使用
SecTrustSetAnchorCertificates(SecTrustRef trust, CFArrayRef anchorCertificates)来设置Anchor Certificate进行校验
文档说明
|
|
也就是说,单纯调用SecTrustSetAnchorCertificates方法后不调用SecTrustSetAnchorCertificatesOnly来验证证书,则只会相信SecTrustSetAnchorCertificates传入的证书,而不会信任其他锚点证书。关于这一点,SecTrustSetAnchorCertificatesOnly方法参数讲解中也有说明:
|
|
只相信传入的锚点证书,也就只会验证通过由这些锚点证书签发的证书。这样就算被验证的证书是由系统其他信任的锚点证书签发的,也无法验证通过。
选择哪一级的CA证书就需要自行判断了
如果选择末端的叶子证书,可能导致域名变化后无法访问,甚至证书过期的情况
参考
http://oncenote.com/2015/09/16/Security-2-HTTPS2/ Jaminzzhang博客
https://www.jianshu.com/p/86dcf94b43e2 WebView证书验证

