1. https 簡單介紹
概述
HTTP協議屬于明文傳輸協議,交互過程以及數據傳輸都沒有進行過加密,通信雙方也沒有進行身份驗證,通信過程非常容易遭到劫持,篡改等安全問題,為了提高網絡傳輸的安全性,HTTPS應運而生.相比HTTP,HTTPS提供了以下三個特性:
- 通信內容隱私性: 內容經過對稱加密,每個連接生成一個唯一的加密密鑰
- 通信雙方身份的真實 : 第三方無法偽造服務端(客戶端)身份
- 通信內容的完整性 :內容傳輸經過完整性校驗
接下來需要了解幾個重要的概念
- SSL
SSL(secure sockets layer):安全套接層,它是在上世紀90年代中期,由網景公司設計的,為解決使用的 HTTP 協議造成傳輸內容會被偷窺(嗅探)和篡改等安全問題而設計的,到了1999年,SSL成為互聯網上的標準,名稱改為TSL(transport layer security):傳輸層安全協議,兩者可視為同一種東西的不同階段。
HTTPS(HTTP over SSL)也是在HTTP的基礎加了一層SSL的封裝。
06070134_FZAi.png
- 對稱加密和非對稱加密
對稱加密(AES,RC4,3DES) 采用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,優點是算法公開、計算量小、加密速度快、加密效率高。;
非對稱加密(RSA,DSA/DSS )算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那么只有用對應的公開密鑰才能解密,非對稱加密算法比對稱加密算法慢數千倍,但在保護通信安全方面,非對稱加密算法卻具有對稱密碼難以企及的優勢。
20170113160933951.png
- CA證書
CA是Certificate Authority的縮寫,也叫“證書授權中心”,CA 證書,顧名思義,就是CA頒發的證書(內含公鑰和私鑰),網上的公眾用戶通過驗證 CA 的簽字從而信任 CA ,任何人都可以得到 CA 的證書(含公鑰),用以驗證它所簽發的證書。 - TCP/UDP
TCP協議是面向連接、保證高可靠性(數據無丟失、數據無失序、數據無錯誤、數據無重復到達)傳輸層協議。
UDP協議也是傳輸層協議,它是無連接,不保證可靠的傳輸層協議。 - 哈希算法
哈希算法(MD5,SHA1)將任意長度的二進制值映射為較短的固定長度的二進制值,這個小的二進制值稱為哈希值。哈希值是一段數據唯一且極其緊湊的數值表示形式。
工作流程
20170113193549689.png
- 客戶端向服務器發送請求,并告訴服務器支持的算法列表;
- 服務器選擇一種算法,并將自己的證書返回給客戶端,證書包含服務器域名和公鑰等信息;
- 客戶端得到證書后進行驗證,驗證通過的話就生成一個隨機值,并用證書中的公鑰進行加密
- 傳遞加密信息,目的就是讓服務器得到這個隨機值,以后客戶端與服務器的通信就可以通過這個隨機值來進行加密解密;
- 服務器用自己的私鑰解密客戶端傳過來的隨機值,然后把內容進行對稱加密,即將信息和私鑰通過加密算法混在一起,這樣除非知道私鑰,不然無法獲取到內容,而客戶端與服務器都知道這個私鑰,所以只要加密算法夠強大,私鑰夠復雜,數據就很安全了;
- 將加密后的信息發給客戶端,客戶端還原信息
- 客戶端用之前生成的私鑰解密服務器發過來的信息,便獲取到了解密后的內容;
2. 在android中如何使用
使用https 需要區分是自簽名證書還是花錢向權威機構申請的證書 ,那么這兩個證書有什么區別 ?
什么是自簽名證書( self-signed certicates)
自簽名證書就是沒有通過受信任的證書頒發機構, 自己通過JDK自帶工具keytool去生成一個證書。
SSL 證書大致分三類:
- 由安卓認可的證書頒發機構(如: VeriSign), 或這些機構的下屬機構頒發的證書.
- 沒有得到安卓認可的證書頒發機構頒發的證書.
- 自己頒發的證書, 分臨時性的(在開發階段使用)或在發布的產品中永久性使用的兩種.
只有第一種, 也就是那些被安卓系統認可的機構頒發的證書, 在使用過程中不會出現安全提示.
對于向權威機構((簡稱CA,Certificate Authority))申請過證書的網絡地址,用OkHttp或者HttpsURLConnection都可以直接訪問 ,不需要做額外的事情 。但是申請需要$$ (每年要交 100 到 500 美元不等的費用)。
CA機構頒發的證書有3種類型:
- 域名型SSL證書(DV SSL):信任等級普通,只需驗證網站的真實性便可頒發證書保護網站;
- 企業型SSL證書(OV SSL):信任等級強,須要驗證企業的身份,審核嚴格,安全性更高;
- 增強型SSL證書(EV SSL):信任等級最高,一般用于銀行證券等金融機構,審核嚴格,安全性最高,同時可以激活綠色網址欄。
**下面主要介紹一下使用自簽名證書的情況 **
具體流程參考 ,http://blog.majiajie.me/2016/05/11/Android-%E5%81%B6%E9%81%87HTTPS/
參考文檔
https時代來了,你卻還一無所知?
Android 偶遇HTTPS : 介紹android 使用自簽名證書實現https請求
初探HTTPS協議
Android Https相關完全解析 當OkHttp遇到Https