背景
之前工作的經歷,前面技術團隊的APP使用了SSL-PINNING,服務器SSL證書到期前,測試環境更換證書,在更換配置OK后,發現APP停止服務了。所有的請求全部都失敗。
后來查到是APP使用了SSL-PINNING。
也就是SSL-PINNING證書到期后會導致APP拒絕服務。
改進
1.
其實,我們除了內置服務器自己的證書,也可以內置廠商中間證書。比如

像這份GeoTrust RSA CA 2018中間證書是2027年到期。一般的APP是不會10年了還可以不改版繼續使用的。但假設發生一例10年不更新的用戶的案例,也會發生APP停止服務。
2.
根據如何正確設定 AFNetworking 的安全連線 « Nelson 寫些 iOS 開發的東東 提供的思路,可以將證書的publicKey部分提取到客戶端硬編碼,每次建立TLS連接時候,匹配公鑰。
服務器在更換續費證書時不要更換私鑰就行了。
* 推薦需要實現防用戶自己抓包的APP采取本方案。
更穩妥的做法
走默認的操作系統CA驗證,但不要APP自己內置。因為APP沒有證書更新、撤銷機制,內置后無法對這份清單進行維護。
