基本的運(yùn)行過程
SSL/TLS協(xié)議的基本思路是采用公鑰加密法供鸠,也就是說劲藐,客戶端先向服務(wù)器端索要公鑰八堡,然后用公鑰加密信息,服務(wù)器收到密文后聘芜,用自己的私鑰解密兄渺。
但是,這里有兩個(gè)問題汰现。
(1)如何保證公鑰不被篡改挂谍?
解決方法:將公鑰放在數(shù)字證書中。只要證書是可信的瞎饲,公鑰就是可信的口叙。
2)公鑰加密計(jì)算量太大,如何減少耗用的時(shí)間嗅战?
解決方法:每一次對話(session)妄田,客戶端和服務(wù)器端都生成一個(gè)"對話密鑰"(session key)俺亮,用它來加密信息。由于"對話密鑰"是對稱加密疟呐,所以運(yùn)算速度非辰旁快,而服務(wù)器公鑰只用于加密"對話密鑰"本身启具,這樣就減少了加密運(yùn)算的消耗時(shí)間本讥。
因此,SSL/TLS協(xié)議的基本過程是這樣的:
(1) 客戶端向服務(wù)器端索要并驗(yàn)證公鑰鲁冯。
(2) 雙方協(xié)商生成"對話密鑰"拷沸。
(3) 雙方采用"對話密鑰"進(jìn)行加密通信。
上面過程的前兩步薯演,又稱為"握手階段"(handshake)撞芍。
握手階段的詳細(xì)過程
"握手階段"涉及四次通信,我們一個(gè)個(gè)來看涣仿。需要注意的是勤庐,"握手階段"的所有通信都是明文的。
客戶端發(fā)出請求(ClientHello)
首先好港,客戶端(通常是瀏覽器)先向服務(wù)器發(fā)出加密通信的請求,這被叫做ClientHello請求米罚。
在這一步钧汹,客戶端主要向服務(wù)器提供以下信息。
(1) 支持的協(xié)議版本录择,比如TLS 1.0版拔莱。
(2) 一個(gè)客戶端生成的隨機(jī)數(shù),稍后用于生成"對話密鑰"隘竭。
(3) 支持的加密方法塘秦,比如RSA公鑰加密。
(4) 支持的壓縮方法动看。
服務(wù)器回應(yīng)(SeverHello)
服務(wù)器收到客戶端請求后尊剔,向客戶端發(fā)出回應(yīng),這叫做SeverHello菱皆。服務(wù)器的回應(yīng)包含以下內(nèi)容须误。
(1) 確認(rèn)使用的加密通信協(xié)議版本,比如TLS 1.0版本仇轻。如果瀏覽器與服務(wù)器支持的版本不一致京痢,服務(wù)器關(guān)閉加密通信。
(2) 一個(gè)服務(wù)器生成的隨機(jī)數(shù)篷店,稍后用于生成"對話密鑰"祭椰。
(3) 確認(rèn)使用的加密方法,比如RSA公鑰加密。
(4) 服務(wù)器證書方淤。
客戶端回應(yīng)
客戶端收到服務(wù)器回應(yīng)以后侣监,首先驗(yàn)證服務(wù)器證書。如果證書不是可信機(jī)構(gòu)頒布臣淤、或者證書中的域名與實(shí)際域名不一致橄霉、或者證書已經(jīng)過期,就會向訪問者顯示一個(gè)警告邑蒋,由其選擇是否還要繼續(xù)通信姓蜂。
如果證書沒有問題,客戶端就會從證書中取出服務(wù)器的公鑰医吊。然后钱慢,向服務(wù)器發(fā)送下面三項(xiàng)信息。
(1) 一個(gè)隨機(jī)數(shù)卿堂。該隨機(jī)數(shù)用服務(wù)器公鑰加密束莫,防止被竊聽。
(2) 編碼改變通知草描,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送览绿。
(3) 客戶端握手結(jié)束通知,表示客戶端的握手階段已經(jīng)結(jié)束穗慕。這一項(xiàng)同時(shí)也是前面發(fā)送的所有內(nèi)容的hash值饿敲,用來供服務(wù)器校驗(yàn)。
上面第一項(xiàng)的隨機(jī)數(shù)逛绵,是整個(gè)握手階段出現(xiàn)的第三個(gè)隨機(jī)數(shù)怀各,又稱"pre-master key"。有了它以后术浪,客戶端和服務(wù)器就同時(shí)有了三個(gè)隨機(jī)數(shù)瓢对,接著雙方就用事先商定的加密方法,各自生成本次會話所用的同一把"會話密鑰"胰苏。
服務(wù)器的最后回應(yīng)
服務(wù)器收到客戶端的第三個(gè)隨機(jī)數(shù)pre-master key之后硕蛹,計(jì)算生成本次會話所用的"會話密鑰"。然后碟联,向客戶端最后發(fā)送下面信息妓美。
(1)編碼改變通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送鲤孵。
(2)服務(wù)器握手結(jié)束通知壶栋,表示服務(wù)器的握手階段已經(jīng)結(jié)束。這一項(xiàng)同時(shí)也是前面發(fā)送的所有內(nèi)容的hash值普监,用來供客戶端校驗(yàn)贵试。
至此琉兜,整個(gè)握手階段全部結(jié)束。接下來毙玻,客戶端與服務(wù)器進(jìn)入加密通信豌蟋,就完全是使用普通的HTTP協(xié)議,只不過用"會話密鑰"加密內(nèi)容桑滩。
轉(zhuǎn)載:
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html