HTTPS
協(xié)議(HyperText Transfer Protocol over Secure Socket Layer
):可以理解為HTTP+SSL/TLS
对省, 即 HTTP
下加入 SSL
層叫胖,HTTPS
的安全基礎(chǔ)是 SSL
,因此加密的詳細(xì)內(nèi)容就需要 SSL
,用于安全的 HTTP
數(shù)據(jù)傳輸塔淤。
HTTPS和HTTP的區(qū)別
-
HTTPS
協(xié)議需要到CA
申請證書哭尝,一般免費證書較少,因而需要一定費用针史。 -
HTTP
是超文本傳輸協(xié)議,信息是明文傳輸碟狞,HTTPS
則是具有安全性的SSL
加密傳輸協(xié)議啄枕。 -
HTTP
和HTTPS
使用的是完全不同的連接方式,用的端口也不一樣族沃,前者是80
频祝,后者是443
。 -
HTTP
的連接很簡單脆淹,是無狀態(tài)的常空;HTTPS
協(xié)議是由SSL+HTTP
協(xié)議構(gòu)建的可進行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議盖溺,比HTTP
協(xié)議安全漓糙。
HTTP的不足
- 竊聽風(fēng)險:黑客可以獲知通信內(nèi)容。
- 篡改風(fēng)險:黑客可以修改通信內(nèi)容烘嘱。
- 冒充風(fēng)險:黑客可以冒充他人身份參與通信昆禽。
SSL
SSL
(Secure Socket Layer
,安全套接字層):1994年為 Netscape
所研發(fā)拙友,SSL
協(xié)議位于 TCP/IP
協(xié)議與各種應(yīng)用層協(xié)議之間为狸,為數(shù)據(jù)通訊提供安全支持。
TLS
TLS
(Transport Layer Security
):其前身是SSL
遗契,它最初的幾個版本(SSL 1.0
辐棒、SSL 2.0
、SSL 3.0
)由網(wǎng)景公司開發(fā)牍蜂,1999
年從 3.1
開始被IETF
標(biāo)準(zhǔn)化并改名漾根,發(fā)展至今已經(jīng)有 TLS 1.0
、TLS 1.1
鲫竞、TLS 1.2
三個版本辐怕。SSL3.0
和TLS1.0
由于存在安全漏洞,已經(jīng)很少被使用到从绘。TLS 1.3
改動會比較大寄疏,目前還在草案階段是牢,目前使用最廣泛的是TLS 1.1
、TLS 1.2
陕截。
加密算法
對稱加密
對稱加密算法非常簡單驳棱,只要加密方和解密方都擁有同一密鑰(可為128
,192
农曲,256 bit
大小的密鑰社搅,密鑰越長,加密解密時間越長乳规,解密難度也越高)形葬,即可完成加密解密過程,且假設(shè)無法強制對加密過的明文進行解密暮的。
非對稱加密
加密使用的密鑰和解密使用的密鑰是不相同的笙以,分別稱為:公鑰、私鑰青扔,公鑰和算法都是公開的源织,私鑰是保密的翩伪。非對稱加密算法性能較低微猖,但是安全性超強,由于其加密特性缘屹,非對稱加密算法能加密的數(shù)據(jù)長度也是有限的凛剥。例如:RSA
、DSA
轻姿、ECDSA
犁珠、 DH
、ECDHE
互亮。
哈希算法
將任意長度的信息轉(zhuǎn)換為較短的固定長度的值犁享,通常其長度要比信息小得多,且算法不可逆豹休。例如:MD5
炊昆、SHA-1
、SHA-2
威根、SHA-256
等凤巨。
數(shù)字簽名
簽名就是在信息的后面再加上一段內(nèi)容(信息經(jīng)過hash
后的值),可以證明信息沒有被修改過洛搀。hash
值一般都會加密后(也就是簽名)再和信息一起發(fā)送敢茁,以保證這個hash
值不被修改。
HTTP 向 HTTPS 演化的過程
第一步:對傳輸?shù)男畔⒓用?/h4>
此種方式屬于對稱加密留美,雙方擁有相同的密鑰彰檬,信息得到安全傳輸伸刃,但此種方式的缺點是:
- 不同的客戶端、服務(wù)器數(shù)量龐大逢倍,所以雙方都需要維護大量的密鑰塘幅,維護成本很高。
- 因每個客戶端授艰、服務(wù)器的安全級別不同们妥,密鑰極易泄露。
第二步:非對稱加密
客戶端用公鑰對請求內(nèi)容加密郎笆,服務(wù)器使用私鑰對內(nèi)容解密谭梗,反之亦然,但上述過程也存在缺點:
- 公鑰是公開的(也就是黑客也會有公鑰)宛蚓,所以第 ④ 步私鑰加密的信息激捏,如果被黑客截獲,其可以使用公鑰進行解密凄吏,獲取其中的內(nèi)容远舅。
第三步:對稱加密,非對稱加密兩者結(jié)合
- 第 ③ 步時图柏,客戶端說:(咱們后續(xù)回話采用對稱加密吧,這是對稱加密的算法和對稱密鑰)這段話用公鑰進行加密任连,然后傳給服務(wù)器蚤吹。
- 服務(wù)器收到信息后,用私鑰解密随抠,提取出對稱加密算法和對稱密鑰后裁着,服務(wù)器說:(好的)對稱密鑰加密。
- 后續(xù)兩者之間信息的傳輸就可以使用對稱加密的方式了拱她。
遇到的問題
- 客戶端如何獲得公鑰二驰?
- 如何確認(rèn)服務(wù)器是真實的而不是黑客?
第四步:獲取公鑰與確認(rèn)服務(wù)器身份
設(shè)想
- 提供一個下載公鑰的地址秉沼,回話前讓客戶端去下載桶雀。(缺點:下載地址有可能是假的;客戶端每次在回話前都先去下載公鑰也很麻煩)氧猬。
- 回話開始時背犯,服務(wù)器把公鑰發(fā)給客戶端(缺點:黑客冒充服務(wù)器,發(fā)送給客戶端假的公鑰)盅抚。
SSL 證書
- 在第 ② 步時服務(wù)器發(fā)送了一個
SSL
證書給客戶端漠魏,SSL
證書中包含的具體內(nèi)容有:- 證書的發(fā)布機構(gòu)
CA
- 證書的有效期
- 公鑰
- 證書所有者
- 簽名
- 證書的發(fā)布機構(gòu)
瀏覽器認(rèn)證
客戶端在接受到服務(wù)端發(fā)來的SSL
證書時,會對證書的真?zhèn)芜M行校驗妄均,以瀏覽器為例說明如下
- 首先瀏覽器讀取證書中的證書所有者柱锹、有效期等信息進行一一校驗哪自。
- 瀏覽器開始查找操作系統(tǒng)中已內(nèi)置的受信任的證書發(fā)布機構(gòu)
CA
,與服務(wù)器發(fā)來的證書中的頒發(fā)者CA
比對禁熏,用于校驗證書是否為合法機構(gòu)頒發(fā)壤巷。 - 如果找不到,瀏覽器就會報錯瞧毙,說明服務(wù)器發(fā)來的證書是不可信任的胧华。
- 如果找到,那么瀏覽器就會從操作系統(tǒng)中取出 頒發(fā)者
CA
的公鑰宙彪,然后對服務(wù)器發(fā)來的證書里面的簽名進行解密矩动。 - 瀏覽器使用相同的
hash
算法計算出服務(wù)器發(fā)來的證書的hash
值,將這個計算的hash
值與證書中簽名做對比释漆。 - 對比結(jié)果一致悲没,則證明服務(wù)器發(fā)來的證書合法,沒有被冒充男图。
- 此時瀏覽器就可以讀取證書中的公鑰示姿,用于后續(xù)加密了。
HTTPS 缺點:
-
SSL
證書費用很高逊笆,以及其在服務(wù)器上的部署栈戳、更新維護非常繁瑣。 -
HTTPS
降低用戶訪問速度(多次握手)览露。 - 網(wǎng)站改用
HTTPS
以后荧琼,由HTTP
跳轉(zhuǎn)到HTTPS
的方式增加了用戶訪問耗時(多數(shù)網(wǎng)站采用302
跳轉(zhuǎn))。 -
HTTPS
涉及到的安全算法會消耗CPU
資源差牛,需要增加大量機器(HTTPS
訪問過程需要加解密)。
HTTPS 的工作流程
客戶端在使用HTTPS
方式與Web
服務(wù)器通信時有以下幾個步驟:
- 客戶使用
HTTPS
的URL
訪問Web
服務(wù)器堰乔,要求與Web
服務(wù)器建立SSL
連接偏化。 -
Web
服務(wù)器收到客戶端請求后,會將網(wǎng)站的證書信息(證書中包含公鑰)傳送一份給客戶端镐侯。 - 客戶端的瀏覽器與
Web
服務(wù)器開始協(xié)商SSL
連接的安全等級侦讨,也就是信息加密的等級。 - 客戶端的瀏覽器根據(jù)雙方同意的安全等級苟翻,建立會話密鑰韵卤,然后利用網(wǎng)站的公鑰將會話密鑰加密,并傳送給網(wǎng)站崇猫。
-
Web
服務(wù)器利用自己的私鑰解密出會話密鑰沈条。 -
Web
服務(wù)器利用會話密鑰加密與客戶端之間的通信。