iOS 防 DNS 污染方案调研 --- SNI 业务场景
概述
SNI(单IP多HTTPS证书)场景下,iOS上层网络库 NSURLConnection/NSURLSession 没有提供接口进行 SNI 字段 配置,因此需要 Socket 层级的底层网络库例如 CFNetwork,来实现 IP 直连网络请求适配方案。而基于 CFNetwork 的解决方案需要开发者考虑数据的收发、重定向、解码、缓存等问题(CFNetwork是非常底层的网络实现)。
针对 SNI 场景的方案, Socket 层级的底层网络库,大致有两种:
- 基于 CFNetWork ,hook 证书校验步骤。
- 基于原生支持设置 SNI 字段的更底层的库,比如 libcurl。
下面将目前面临的一些挑战,以及应对策略介绍一下:
支持 Post 请求
使用 NSURLProtocol 拦截 NSURLSession 请求丢失 body,故有