因項目須要,對HTTPS強制握手做了研究,分享處理方法以下(NSURLConnection):緩存
1、 問題與需求服務器
問題:接入方可能對同個域名作了HTTPS證書驗證,在緩存機制下,進入SDK中默認複用HTTPS握手;或者NSURLProtocol對驗證做了攔截。網絡
需求: 基於SDK方不信任接入方驗證,需強制從新握手。dom
2、理論前提spa
1. 握手緩存以IP地址,DNS域名,端口爲KEY對握手做緩存get
2. 「www.xxx.com」, 「www.xxx.com.」會有相同的DNS解析結果。關於加.的解析,搜索下 fully qualified domain name域名
3、解決方案io
1. 服務器方給出專用IP,域名或端口class
2. 客戶端:搜索
a. 在統一入口的API訪問時,將域名後加「.」做爲僞造URL
b. 僞造URL觸發握手後,請求返回didLoad或失敗did fail均不做處理,將僞造API去除「.」,
變回標準API,繼續正常通信
c. SDK握手添加標識,因URLProtocol或證書緩存致使的 「跳過驗證「 都可被防護
4、負做用
1.不復用接入方的握手,增長了網絡訪問時間
2.增長了一次僞造URL訪問的通信時間