目錄中間人攻擊
分析ca
https=非對稱加密+對稱加密+hash+ca=http+ssl
https連線過程
burp抓https包過程
演算法f
,加解密keyk
加密:f(k,data)=x
解密:f(k,x)=data
過程:c f(k,data)=x ==x>>s f(k,x)=data
c通過k加密data得到x並傳輸給s,s通過k解密x得到data
s f(k,data)=x ==x>>c f(k,x)=data
s通過k加密data得到x並傳輸給c,c通過k解密x得到data
只用對稱加密,只用乙個公有的key[如果每個c乙個,對於s儲存壓力太大]:
因為hacker也有這個k,所以hacker也能解密c與s之間的加密資訊
演算法f
,加解密key 公鑰pk
私鑰sk
,私鑰sk只有s有
加密:f(pk,data)=y
解密:f(sk,y)=data
加密:f(sk,data)=y2
解密:f(pk,y2)=data
過程:c==>>s s==pk>>c
c向s索要公鑰pk
c f(pk,data)=y ==y>>s f(sk,y)=data
c通過pk加密data得到y並傳輸給s,s通過sk解密y得到data
s f(sk,data)=y2 ==y2>>c f(pk,y2)=data
s通過sk加密data得到y2並傳輸給c,c通過pk解密y2得到data
c to s時,c用pk加密的y只有s能解密,因為只有s有sk
但,s to c時,因為hacker也有pk,所以sk加密的y2,c和hacker都能解密
非對稱加密的缺點:ctos安全,但stoc因為hacker也有pk,所以不安全
結合以上優缺點,似乎非對稱+對稱有戲
過程:非對稱加密通訊確定臨時key
c==>>s s==pk>>c
c向s索要公鑰pk
c f(pk,key)=y ==y>>s f(sk,y)=key
c通過pk加密key得到y並傳輸給s,s通過sk解密y得到key,這個key就是臨時key,因為只有s有sk,所以此時,只有c和s知道這個key
臨時key作公鑰進行對稱加密通訊
c f(key,data)=x ==x>>s f(key,x)=data
c通過key加密data得到x並傳輸給s,s通過key解密x得到data
s f(key,data)=x ==x>>c f(key,x)=data
s通過key加密data得到x並傳輸給c,c通過key解密x得到data
先用非對稱加密,在ctos時,雙方確定乙個臨時的key作為公鑰進行後續的對稱加密通訊,每個c得出的key都是不同的
對於hacker來說,因為沒有非對稱加密中的sk,他得不到這個臨時的key,也就無法解密後續的對稱加密通訊
非對稱+對稱看起來無懈可擊,但當hacker直接在第一步ctos時就介入,將自己偽裝成s,他就能獲取ctos的通訊,再將自己偽裝成c與s溝通,就能獲取stoc的通訊
過程:非對稱加密通訊確定臨時key
1.c==>>s(h) s(h)==pkh>>c
c得到的是hacker的pkh
c(h)==>>s s==pk>>c(h)
hacker得到了s的pk
2.c f(pkh,key)=y ==y>>s(h) f(skh,y)=key
hacker得到了c發的key
c(h) f(pk,keyh)=y ==y>>s f(sk,y)=keyh
s得到了hacker發的keyh
此時,hacker有c的臨時key,s的臨時keyh,hacker使用相應的臨時key和臨時keyh作公鑰分別與c和s作對稱加密通訊,通訊內容相同,左右手互換
3.c f(key,data)=x ==x>>s(h) f(key,x)=data
c通過key加密data得到x並傳輸給hacker,hacker通過key解密x得到data
c(h) f(keyh,data)=x ==x>>s f(keyh,x)=data
hacker通過keyh加密data得到x並傳輸給s,s通過keyh解密x得到data
4.s(h) f(key,data)=x ==x>>c f(key,x)=data
hacker通過key加密data得到x並傳輸給c,c通過key解密x得到data
s f(keyh,data)=x ==x>>c(h) f(keyh,x)=data
s通過keyh加密data得到x並傳輸給hacker,hacker通過keyh解密x得到data
至此,hacker做到了同時欺騙c和s,hacker知道c和s之間的所有通訊資訊
hacker從第一步c請求公鑰的時候就介入了,導致c一直以為和他通訊的是s,其實是hacker,也就是說,c不知道拿到手的公鑰pk是好是壞
引入ca(證書頒發機構),理解為乙個權威可信的機構
只有ca認證的公鑰才是可信的公鑰
過程:ca把s的pk作為data,把自己的csk作為key,加密pk得到license
==>>c(csk,pk)=license
ca將license賣給s【對,s要給錢的】,s將license傳送給c,c的作業系統內建了大量的ca的cpk,c使用cpk對license進行解密就能拿到真正的pk
==>>c(cpk,license)=pk
c保證了手上的pk是真實的,就能按部就班與s進行對稱加密通訊
csk只有ca有,cpk大家都有
hacker要想讓c認為手上的pkh是真的,必須c(cpk,licenseh)=pkh
=>c(csk,pkh)=licenseh
,也就是hacker必須有csk才能有對應的可被cpk解密的licenseh
這也並非絕對安全,最直接的,萬一hacker通過攻擊ca拿到csk怎麼辦?
c->s c向s索要公鑰
cc->ca c向ca確定公鑰真實可信
c->s c生成隨機數,用公鑰加密後傳送給s
cc使用隨機數作為公鑰解密收到的資料
詳細點:
https請求
c向s傳送https請求
生成公鑰1和私鑰
s收到請求後,生成公鑰1和私鑰
返回公鑰1
s將公鑰1返回給c,公鑰1包含資訊:證書頒發機構,過期時間等等
客戶端傳送公鑰2
c用s的公鑰1加密公鑰2後傳送給s
服務端獲取公鑰2,用公鑰2加密後續的通訊內容
s收到公鑰1加密的公鑰2,用私鑰解密得到公鑰2,在後續與c的通訊中用公鑰2對內容進行對稱加密
加密傳輸
s將經過公鑰2加密的內容傳輸給c
獲取加密內容,解密
c獲取公鑰2加密的內容,用先前生成的隨機數,也就是公鑰2對其解密,獲取明文內容
burp抓https包,要先把burp的證書匯入成證書頒發機構,讓burp證書變為根證書
在https過程的第一步建立握手前,burp抓取c發給s的https請求
burp作為中間人,與伺服器建立握手,獲取到伺服器的經過ca加密的license,用根證書也就是burp證書解密license得到s的公鑰1。然後burp偽造自己的license,傳送給c
c由於根證書[burp證書]的驗證,會將burp偽造的license當成s的license,解密得出burp的公鑰2,後續流程就是https的過程。burp作為c與s通訊和burp作為s與c通訊
HTTPS實現原理
ssl建立連線過程 client向server傳送請求然後連線到server的443埠,傳送的資訊主要是隨機值1和客戶端支援的加密演算法。server接收到資訊之後給予client響應握手資訊,包括隨機值2和匹配好的協商加密演算法,這個加密演算法一定是client傳送給server加密演算法的子集。...
HTTPS實現原理
https 協議 就是 http 協議 和 ssl tls 協議 的組合。http over ssl 或 http over tls 對http協 議的文字資料進行加密處理後,成為二進位制形式傳輸 https結構 https工作簡化過程 1.客戶端發起https請求 使用者在瀏覽器裡輸入乙個http...
關於HTTPS實現原理詳解
https實現原理 ssl建立連線過程 client向server傳送請求然後連線到server的443埠,傳送的資訊主要是隨機值1和客戶端支援的加密演算法。2.server接收到資訊之後給予client響應握手資訊,包括隨機值2和匹配好的協商加密演算法,這個加密演算法一定是client傳送給ser...