1. 客戶端先發(fā)出請(qǐng)求
首先刊橘,客戶端(通常是瀏覽器)先向服務(wù)器發(fā)出加密通信需求然走,這加clientHello請(qǐng)求聚凹。在這一步葵硕,客戶端主要向服務(wù)器提供以下信息问拘。
1.支持的協(xié)議版本猎莲,比如TLS1.0版本
2.一個(gè)客戶端生成的隨機(jī)數(shù)幅恋,稍后用于生成“對(duì)話密鑰“
3.支持加密算法砂豌,比如RSA公鑰加密
4.支持壓縮是方法
2先嬉、服務(wù)器回應(yīng)
服務(wù)器收到客戶端請(qǐng)求后轧苫,向客戶端發(fā)出回應(yīng),這叫serverHello疫蔓。服務(wù)器的回應(yīng)包含以下內(nèi)容含懊。
1.確認(rèn)使用的加密通信協(xié)議版本,比如TLS1.0版本衅胀,如果瀏覽器和服務(wù)器支持的版本不一致岔乔,服務(wù)器關(guān)閉加密通信。
2.一個(gè)服務(wù)器生成隨機(jī)數(shù)滚躯,稍后用于生成“對(duì)話密鑰“
3.確認(rèn)使用的加密方法雏门,比如RSA公鑰加密
4.服務(wù)器證書
3、客戶端回應(yīng)
客戶端接收到服務(wù)器的回應(yīng)以后掸掏,首先驗(yàn)證服務(wù)器證書茁影。如果驗(yàn)證服務(wù)器證書不是可信機(jī)構(gòu)頒布,或者證書中的域名與實(shí)際域名不一致丧凤,或者證書已經(jīng)過期募闲,就會(huì)向訪問者顯示一個(gè)警告,由其選擇是否繼續(xù)通信愿待。如果證書沒有問題浩螺,服務(wù)器就會(huì)從證書中取出服務(wù)器的公鑰,然后項(xiàng)服務(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í)有了3個(gè)隨機(jī)數(shù)格了,接著按照事先商定的加密方法看铆,各自生成本次會(huì)話所用的會(huì)話密鑰。
4盛末、服務(wù)器的最后回應(yīng)
服務(wù)器收到客戶端的第三個(gè)隨機(jī)數(shù)pre-master key之后弹惦,計(jì)算生成本次會(huì)話所用的“會(huì)話密鑰“。然后向客戶端發(fā)送一下信息
1.編碼通知改變悄但,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送
2.服務(wù)器握手通知結(jié)束棠隐,表示服務(wù)器的握手階段以及結(jié)束。這一項(xiàng)同時(shí)也是前面發(fā)送的所有內(nèi)容的hash值檐嚣,供客戶端校驗(yàn)
至此助泽,整個(gè)握手階段全部結(jié)束。接下來嚎京,客戶端與服務(wù)器進(jìn)入加密通信嗡贺,就完全使用普通的HTTP協(xié)議,只不過用“會(huì)話密鑰”加密內(nèi)容鞍帝。