OkHttp簡介
由Square公司貢獻的一個處理網(wǎng)絡(luò)請求的開源項目,是目前Android使用最廣泛的網(wǎng)絡(luò)框架。從Android4.4開始HttpURLConnection的底層實現(xiàn)采用的是OkHttp。
特點:
- 支持HTTP/2并允許對同一主機的所有請求共享一個套接字
- 通過連接池,減少了請求延遲
- 默認通過GZip壓縮數(shù)據(jù)
- 響應(yīng)緩存,避免了重復(fù)的網(wǎng)絡(luò)請求
- 請求失敗自動重試主機的其他ip,自動重定向
什么是SSL
SSL其實就是Secure Scoket Layer安全套接層,提供了一種為網(wǎng)絡(luò)通信提供安全以及數(shù)據(jù)完整性的安全協(xié)議,再傳輸層對網(wǎng)絡(luò)進行加密。
- SSL記錄協(xié)議: 為高層協(xié)議提供安全封裝,壓縮,加密等基本功能
- SSL握手協(xié)議:用與再數(shù)據(jù)傳輸開始前進行通信雙方的身份驗證、加密算法協(xié)商、交換秘鑰
https安全的http協(xié)議是建立在SSL層或TLS層上的http協(xié)議,在普通的傳輸層和http應(yīng)用層之間插入SSL或TLS安全層。
https使用非對稱加密進行加密秘鑰協(xié)商,采用對稱加密方式對報文進行加密處理以保證安全性
https不同于http,使用443端口作為默認端口,建立TCP連接后,會初始化SSL層,對加密參數(shù)進行溝通并交換秘鑰。
非對稱加密
數(shù)字簽名技術(shù)
數(shù)字簽名技術(shù)是為了證明數(shù)據(jù)的完整性,未經(jīng)過的三方修改(發(fā)送者身份的真實性);主要包括兩個方面:摘要算法和加密。
1.摘要算法通過哈希處理將原始信息轉(zhuǎn)換成固定長度的序列,確保輸入到輸出的一一映射,原始信息的變化將導(dǎo)致輸出結(jié)果的變化,常見的有MD5,SHA-1,SHA-256等。
2.加密采用非對稱加密,私鑰加密保證加密后的摘要信息無法更改
數(shù)字簽名流程:
1、對原始信息進行摘要算法處理,得到摘要信息,使用私鑰對摘要信息進行加密,生成簽名。
2、簽名與原始信息合并成最終簽名文件發(fā)布
3、接收方使用公鑰將簽名文件中的數(shù)字簽名進行解密
4、對原始信息進行摘要算法處理
5、對比3、4步的結(jié)果,一致說明文件未被更改;
數(shù)字證書
1.數(shù)字證書包含有公鑰,證書有效期,發(fā)證機構(gòu)等信息;數(shù)字證書需要向CA機構(gòu)申請,獲取到的數(shù)字證書是經(jīng)過簽名處理的。
-
CA機構(gòu)的根證書是沒有經(jīng)過簽名的數(shù)字證書,可以直接拿到其公鑰。
-
CA機構(gòu)頒發(fā)的次級證書已經(jīng)使用私鑰進行了簽名處理,可以使用CA根證書中的公鑰進行解密獲得次級證書中的公鑰。能正常解密才能說明次級證書的合法性。
-
客戶端持有CA根證書,在服務(wù)端發(fā)送申請到的數(shù)字證書給客戶端后,客戶端使用根證書公鑰解密處理,驗證服務(wù)端證書。
SSL握手過程
ssl握手過程完成加密算法的協(xié)商和加密秘鑰的確定,雙方數(shù)字證書的認證工作。
具體流程如下:
- 1.客戶端發(fā)起連接請求,發(fā)送客戶端支持的SSL版本號,加密算法(密碼套件/Cipher Suites)列表,隨機數(shù)給服務(wù)端
- 密碼套件格式:每個套件都以“SSL”開頭,緊跟著的是密鑰交換算法。用“With”這個詞把密鑰交換算法、加密算法、散列算法分開,例如:SSL_DHE_RSA_WITH_DES_CBC_SHA, 表示把DHE_RSA(帶有RSA數(shù)字簽名的暫時Diffie-HellMan)定義為密鑰交換算法;把DES_CBC定義為加密算法;把SHA定義為散列算法。
- 2.服務(wù)端在客戶端支持的加密算法中選擇一組,和服務(wù)端證書(包含公鑰)、一個隨機數(shù)一起發(fā)給客戶端
- 3.客戶端對服務(wù)端的證書進行驗證并獲取公鑰,產(chǎn)生一個稱作pre_master_secret的隨機密碼串,并使用服務(wù)器的公用密鑰對其進行加密(參考非對稱加/解密),并將加密后的信息發(fā)送給服務(wù)器;
- 4.客戶端與服務(wù)器端根據(jù)pre_master_secret以及客戶端與服務(wù)器的隨機數(shù)值(第1,2步中的隨機數(shù))獨立計算出加密和MAC密鑰。
這里有三個秘鑰:服務(wù)端證書傳遞的公鑰,隱含的服務(wù)端持有的私鑰,最終的加密秘鑰;
公鑰和私鑰是非對稱加密算法的秘鑰,主要用于服務(wù)端和客戶端協(xié)商生成最終的加密秘鑰,保證協(xié)商過程的保密性
最終生成的加密秘鑰匙對稱加密算法的秘鑰,主要用于后面數(shù)據(jù)交換的加密
pre_master_secret是客戶端生成的一段隨機碼用于生成最終的加密秘鑰(使用秘鑰交換算法)。
以上流程是單向認證流程即只有客戶端對服務(wù)端進行認證
本文是對okhttp網(wǎng)絡(luò)框架中的SSL握手與加密的簡單介紹與理解,更多有關(guān)可以前往《okhttp網(wǎng)絡(luò)框架筆記》學(xué)習(xí)進階跟多技術(shù)板塊,可以點擊查看詳細類目。文章來源:http://www.zghlxwxcb.cn/news/detail-718974.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-718974.html
到了這里,關(guān)于OkHttp網(wǎng)絡(luò)框架深入理解-SSL握手與加密的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!