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,故有