一、學習思路
二某宪、HTTPS 協(xié)議層次
SSL和TLS為數(shù)據(jù)安全通信提供支持仿村。
三、HTTPS設(shè)計思路
1兴喂、服務器生成公鑰對A蔼囊,把公鑰和其他信息info發(fā)送給CA機構(gòu),申請證書衣迷;
2畏鼓、CA機構(gòu),有一套自己的公鑰對S壶谒,CA機構(gòu)將info生成數(shù)字摘要云矫,并使用S私鑰對摘要進行加密,CA機構(gòu)在操作系統(tǒng)系統(tǒng)有有一套證書佃迄,保存的是S公鑰泼差;
3贵少、CA機構(gòu)將info和加密后的數(shù)字摘要生成證書發(fā)送給服務器呵俏;
4、服務器進行https通信時滔灶,先發(fā)送證書普碎;
5.6.7、客戶端收到證書后录平,首先驗證證書合法性麻车,獲取OS內(nèi)部受信任的CA證書,使用OS公鑰對證書摘要進行解密出hash值斗这,再使用相同的hash算法對證書內(nèi)容進行hash計算动猬,比較兩個hash值是否一致,一致則認為證書合法表箭;
8赁咙、客戶端驗證證書合法后,client生成對稱秘鑰對,并使用公鑰A將秘鑰對加密彼水,發(fā)送給服務器崔拥,之后的交互數(shù)據(jù),則使用對稱秘鑰加密凤覆。(實際過程并未如此)
由此可見链瓦,整個HTTPS過程涉及到兩對公鑰對,一是用戶加密數(shù)據(jù)通信的對稱秘鑰盯桦,放在數(shù)字證書中慈俯;二是CA機構(gòu)的公鑰對,放在OS內(nèi)俺附,用于驗證證書是否合法
四肥卡、TLS握手
整個交互過程可以分為三個階段:tcp握手,tls握手(明文或者密文)事镣,tls數(shù)據(jù)交互(密文)
tls握手用于驗證雙方及協(xié)商通信的加密秘鑰步鉴。
一般的,tls握手過程是明文交互的璃哟,也可以使用RSA對稱加密氛琢,雙方協(xié)商一致就可以。
有三種情況的握手:
a随闪、只驗證服務器的SSL握手過程
b阳似、驗證服務器和客戶端的SSL握手過程
c、恢復原有會話的SSL握手過程
下圖展示了“a铐伴、只驗證服務器的SSL握手過程”
注意撮奏,第4階段,server key exchange是可選的当宴,作為證書的補充
下列場景才會有server key exchange
協(xié)商采用了RSA加密畜吊,但服務器端的證書沒有提供RSA公鑰
協(xié)商采用了DH加密,但服務器端的證書沒有提供DH參數(shù)
協(xié)商采用了fortezza_kea加密户矢,但是服務端的證書沒有提供參數(shù)
4.1玲献、TLS會話緩存機制
為了加快建立握手的速度,減少協(xié)議帶來的性能降低和資源消耗梯浪,TLS協(xié)議有兩類會話緩存機制:
會話標識session ID和會話記錄session ticket.
client -> server:? clienthello(session id)
server -> client:? serverhello, change cipher spec, encrypted handshake message
client -> server:? change cipherspec, encrypted handshake message
客戶端再次和服務器建立連接捌年,則在client中session
ID中攜帶記錄的信息,發(fā)送給服務器挂洛。
服務器根據(jù)session ID檢索緩存記錄礼预,如果沒有檢索到,則按正常的握手進行虏劲;
如果檢索到托酸,則返回change_cipher_spec與encrypted_handshake_message;
如果客戶端能夠驗證通過服務器加密數(shù)據(jù)荠藤,則客戶端同樣發(fā)送change_cipher_spec與encrypted_handshake_message信息;
服務器驗證數(shù)據(jù)通過获高,則握手建立成功哈肖,開始進行正常的加密數(shù)據(jù)通信;
4.2念秧、客戶端重連
客服端和服務器之間建立了有效TLS連接并通信淤井;
客戶端需要更新秘鑰,主動發(fā)出client_hello信息摊趾;
服務器識別重建連接請求后币狠,發(fā)送server_hello信息;
客戶端和服務器開始新的重建連接過程砾层;
4.3漩绵、服務器重連
客服端和服務器之間建立了有效TLS連接并通信;
客戶端訪問受保護的信息肛炮;
服務端返回hello_request信息止吐;
客戶端收到hello_request信息之后發(fā)送client_hello信息,開始重新建立連接侨糟;
五碍扔、證書
5.1、證書結(jié)構(gòu)
版本:標識證書的版本(1,2和3)
序列號:標識證書的唯一標識符
簽名算法:本證書所用簽名算法
頒發(fā)者:證書頒發(fā)者的可識別名
使用者:證書擁有者的可識別名
公鑰:證書發(fā)布的公鑰
CRL:證書吊銷列表秕重,包含CA已經(jīng)吊銷的證書序列號及其吊銷日期
證書策略:
使用者秘鑰標識符
頒發(fā)機構(gòu)秘鑰標識符:用于證書鏈的驗證
證書吊銷列表(CRL)與證書狀態(tài)在線查詢協(xié)議(OCSP)
一般CA都只是每隔一定時間(幾天或者幾個月)才發(fā)布新的吊銷列表不同,所以CRL不能及時反映證書狀態(tài)。
而OCSP就能滿足實時在線查詢證書狀態(tài)的要求溶耘。OCSP服務器會返回證書的三個狀態(tài):正常二拐、吊銷和未知。
在頒發(fā)機構(gòu)信息訪問提供了OCSP服務器地址 http://ocsp.wsign.com
瀏覽器在訪問https網(wǎng)站是凳兵,先檢查此證書是否已經(jīng)被吊銷百新,如果證書已經(jīng)被吊銷,則會顯示警告信息: “此組織的證書已被吊銷留荔。安全證書問題可能顯示試圖欺騙您或截獲您向服務器發(fā)送的數(shù)據(jù)吟孙。建議關(guān)閉此網(wǎng)頁澜倦,并且不要繼續(xù)瀏覽該網(wǎng)站聚蝶。 ”
5.2、信任鏈
CA組織結(jié)構(gòu)是一個樹結(jié)構(gòu)藻治,一個root CA下面有多個mid CA碘勉,而mid CA又可以包含多個mid CA。
root CA和mid CA都可以頒發(fā)證書給用戶桩卵,頒發(fā)的分別是root證書和中間證書验靡,最終用戶用來認證公鑰的證書被稱為end-user證書倍宾。
如果end-user證書是mid CA頒發(fā)的,那么握手階段胜嗓,需要把中間證書也一并發(fā)給客戶端高职。
證書鏈驗證過程:
六、秘鑰協(xié)商過程
在TLS握手階段確定了雙方使用的密碼學套件辞州。
(秘鑰協(xié)商怔锌、證書驗證、數(shù)據(jù)加密是三個獨立的過程)
舉例:
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
DHE_RSA:表示握手過程中使用的非對稱加密算法(秘鑰交換用的是DHE, 證書用的RSA),如果WITH只有一個变过,那么表示交換信息和證書用的是同一個算法
??????? (可選的主要的密鑰交換算法包括:RSA, DH, ECDH, ECDHE埃元。可選的主要的證書算法包括:RSA, DSA, ECDSA媚狰。兩者可以獨立選擇岛杀,并不沖突)
AES_256_CBC_SHA:表示加密信道的對稱加密算法和hash算法
?
七、秘鑰交換算法
雙方在握手過程中崭孤,通過秘鑰交換算法类嗤,確定后續(xù)通信的秘鑰
常用的秘鑰交換算法:RSA、DH類秘鑰交換算法
7.1辨宠、RSA秘鑰交換過程:
A->B
B:把公鑰放在證書中
A:使用隨機數(shù)算法土浸,生成一個秘鑰key,用公鑰加密彭羹,發(fā)送給B黄伊。
RSA面臨的問題:一旦私鑰外泄(私鑰參與了協(xié)商過程),那么key就能解密之前監(jiān)聽的所有的密文(向前不安全)派殷,安全性取決于私鑰是否保存完好还最。
7.2、更安全的DH類秘鑰交換算法
DH類秘鑰算法有:DH, DHE, ECDH, ECDHE
DH(靜態(tài)DH算法毡惜,秘鑰交換始終選擇相同的私鑰拓轻,因此,每次的共享私鑰都相同)
DHE(臨時DH算法经伙,每個連接生成一個臨時的DH秘鑰扶叉,因此同一秘鑰永遠不會被使用兩次。向前保密)
7.3帕膜、DHE秘鑰交換算法(基于離散對數(shù)難題)簡單說明:
??? A->B
??? A:生成一個隨機數(shù)X(作為自己的私鑰)枣氧,a= g^x mod p (g的x次方對p取模),p 是個大素數(shù)垮刹,g是生成數(shù)达吞,將a發(fā)送給B????????
? ? B:生成一個隨機數(shù)Y(作為自己的私鑰),b= g^y mod p荒典,將b發(fā)送給A酪劫。
? ?A: 計算 key1 = b^x mod p
??? B:計算 key2 = a^y mod p
? ? 根據(jù)數(shù)學邏輯吞鸭,key1=key2,所以秘鑰交換成功
DHE安全性體現(xiàn)在:傳輸?shù)闹皇莂、b覆糟、p刻剥、g,中間沒有傳輸私鑰x和y,在已知這四個數(shù)很難得出x和y(依賴于離散)滩字,保證了安全透敌。
DH秘鑰計算舉例:
假設(shè) g =10, p = 7踢械,x = 3, a = 6酗电,y = 11 , b = 5
key1 = ((g^x)mod p)^y mod p = ((10^3)mod 7)^11 mod 7 =6
key2 = ((g^y)mod p)^x mod p = ((10^11)mod 7)^3 mod 7 =6
7.4、基于ECDHE的秘鑰交換算法(基于橢圓離散對數(shù)難題)
ECDHE的運算是把DHE中模冪運算替換成了點乘運算内列,速度更快撵术,可逆更難
A->B
A:生成一個隨機數(shù)Ra,計算Pa(x,y) = Ra * Q(x, y)话瞧,Q(x, y)為全世界公認的某個橢圓曲線算法的基點嫩与。將Pa(x, y)發(fā)送至服務器。
B:生成隨機值Rb交排,計算Pb(x,y)= Rb * Q(x, y)划滋。將Pb(x, y)發(fā)送至客戶端。
A:計算Sa(x,y) = Ra * Pb(x, y)
B:計算Sb(x,y) = Rb * Pa(x, y)
算法保證了Sa =Sb = S埃篓,提取其中的S的x向量作為密鑰(預主密鑰)