YTKNetWork原始碼解析——針對SSL自產證書認證如何隨心所欲的遊走在IP和域名之間並開啟想要的驗證
YTKNetWork原始碼解析——
針對SSL自產證書認證如何隨心所欲的遊走在IP和域名之間並開啟想要的驗證
最近在進行遇到個比較奇葩棘手的問題,下面進行場景介紹:
1、 只有測試環境:ip地址,之後用 地址A替換
2、 生產環境:域名,之後使用地址B替換
3、 不管是地址A還是地址B都需要使用SSL資產證書驗證,如果使用的是B地址需要開啟域名驗證
4、 應用程式如何走地址A,B需要通過使用A地址的返回值來確定如何走哪類?
在這樣的情況下的,首先我們得保證我們的SSL資產證書必須要能夠同時對A和B校驗。
場景一:
剛進來我們會走B地址進行藉口呢請求,如果請求成功那麼是完全可以進行A地址請求
這個原因主要還是由於我們在開始的時候對manager建立是在請求值回來之後,我們建立的manager的securityPlocity 中的屬性是信任自產證書,域名驗證不開啟,這樣就導致論文我們的場景一。
場景二:
剛進來我們進行斷網模擬,B介面請求失敗,那麼在我們進行操作的時候如果現在想去請求A介面的資料,請求不到,因為B開啟了域名驗證我們A是地址這樣我們就無法繼續進行下面的操作了,那怎麼處理呢?
這個原因我們就要進行深究YTKNetwork的底層程式碼了,在YTKnetwork中網路請求是個單例,第一次建立的時候,讀取了config來進行配置。這個庫主要使用了命令模式:主要有兩個類,一個request為命令,另一個是ytknetworkagent。
ytknetworkagent也就是執行命令的物件,在第一次網路請求時,會讀取你設定的配置資訊後邊再請求,就不會讀取了。因為他使用的是單例模式,當我們在第一次請求失敗之後,其實物件已經建立了,之後我們在進行A地址請求的時候,我們拿到的配置資訊是對B的請求配置資訊(開啟域名驗證,開啟SSL自產證書認證),這套資訊已經完全不能對A起作用了。有人就會問了,我們直接在開始請求B的時候對他的資訊配置資訊更改,就可以解決呀?小編也進行了對應的測試修改,沒毛病,配置資訊可以修改,但是還是不能請求。這個問題我們就要進行追蹤底層庫的程式碼,在對應的配置資訊我們看到了config中的屬性已經完全非被改了,他的資訊和我們需要進行請求的A地址我們需要的資訊完全一致。但是當我們在對管理員進行檢視的時候我們就會發現,又問題了。這是什麼原因導致的呢,只是因為執行命令的物件只建立了一次,而且在建立之後我們不能進行修改他的屬性。這個具體大家去看程式碼吧。但是我們有需求怎麼解呢,這個就只能對我們執行物件做修改,我們需要把manager以屬性的方式提出來,這樣我們在修改配置資訊的時候我們可以進行對物件管理者進行修改,就會達到我們想要的目的,完全可以通過他隨心所欲的在ip和域名之間進行遊走,進行各種奇葩的驗證處理。
程式碼暫時沒有貼圖,不懂的可以聯絡小編共同學習。