因項目需要,對HTTPS強制握手作了研究,分享處理方法如下:
一、 問題與需求
問題:接入方可能對同個域名做了HTTPS證書驗證,在緩存機制下,進入SDK中默認復用HTTPS握手;或者NSURLProtocol對驗證作了攔截。
需求: 基於SDK方不信任接入方驗證,需強制重新握手。
二、理論前提
1. 握手緩存以IP地址,DNS域名,端口為KEY對握手作緩存
2. “www.xxx.com”, “www.xxx.com.”會有相同的DNS解析結果
三、解決方案
1. 服務器方給出專用IP,域名或端口
2. 客戶端:
a. 在統一入口的API訪問時,將域名後加“.”作為偽造URL
b. 偽造URL觸發握手後,請求返回didLoad或失敗did fail均不作處理,將偽造API去除“.”,
變回標准API,繼續正常通訊
c. SDK握手添加標識,因URLProtocol或證書緩存導致的 “跳過驗證“ 均可被防御
四、負作用
1.不復用接入方的握手,增加了網絡訪問時間
2.增加了一次偽造URL訪問的通訊時間