一种基于iOS系统的实现IP直连HTTPS服务器的方案

本文介绍了一种基于iOS系统实现IP直连HTTPS服务器的方案,通过使用NSURLProtocol拦截网络请求,结合CFNetwork进行Socket通信并设置SNI域名,解决了因缺少SNI字段配置导致的HTTPS请求失败问题。方案适用于单IP单/多HTTPS证书场景,包括CDN资源请求。同时,文中提供了HttpDns在SNI场景下的使用说明和关键代码示例。
摘要由CSDN通过智能技术生成

一、引言

HttpDNS:智营解析SDK,基于Http协议向腾讯云的DNS服务器发送域名解析请求,替代了基于DNS协议向运营商Local DNS发起解析请求的传统方式,可以避免Local DNS造成的域名劫持和跨网访问问题,解决移动互联网服务中域名解析异常带来的困扰。

HTTPS:Hyper Text Transfer Protocol over Secure Socket Layer,是安全传输的通信协议,HTTPS有两部分组成:HTTP和SSL/TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,传输的数据都是加密后的数据。

SSL/TLS:Secure Sockets Layer/ Transport Layer Security,是一种架构于TCP之上的安全通信协议,它可以有效地协助Internet应用软体提升通信时的完整性以及安全性。

SNI:Server Name Indication,是为了解决一个服务器使用多个域名和证书的SSL/TLS扩展。它的工作原理如下:在连接到服务器建立SSL链接之前先发送要访问站点的域名(Hostname),服务器根据这个域名返回一个合适的证书。

CDN:Content Delivery Network,即内容分发网络,通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

二、本方案概述

        发送HTTPS请求时,首先要进行SSL/TLS握手,握手过程中关键的步骤为服务端下发证书及客户端对此证书进行合法性校验,然而证书是与域名关联的,并非IP,因此在上述过程中,一般解决方案分为以下两种场景:

  1. 单IP单HTTPS证书
  2. 单IP多HTTPS证书。

        在场景1下,服务端可以下发正确的HTTPS证书,客户端在拿到证书后替换为原域名进行校验即可。

        而在场景2下,一般多为请求CDN资源时,因为CDN的节点往往服务了很多的域名,则会存在一个服务器使用多个域名和证书的情况,这种情况下,服务器获取到的域名为IP,无法找到匹配的证书,会出现SSL/TLS握手不成功的错误,从而导致HTTPS请求失败。SNI即为解决这种场景的SSL/TLS扩展,然而iOS上层网络库NSURLConnection/NSURLSession并没有提供接口进行SNI字段的配置。

        因此,为了解决这个问题,需要使用到iOS Socket层级的底层网络库例如CFNetwork,来实现IP直连网络请求适配方案。

        本方案使用NSURLProtocol拦截网络请求,然后使用CFHTTPMessageRef创建NSInputStream实例进行Socket通信,并设置其kCFStreamSSLPeerName的值,有效解决了SNI字段配置问题,并在客户端拿到HTTPS证书时,替换为原域名进行校验。使用该方案后在以上两个场景下均可实现使用IP直连HTTPS服务器的需求。

三、本方案详细说明

        HTTPS请求的过程详细如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值