現(xiàn)在很多網(wǎng)站已經(jīng)逐漸使用HTTPS來代替HTTP來保障通信安全哈肖。和HTTP相比凝赛,HTTPS不再采用明文傳輸數(shù)據(jù),第三方無法竊聽通信的內(nèi)容季眷,也無法篡改內(nèi)容或者偽造身份。
HTTPS采用SSL/TSL協(xié)議卷胯,TSL協(xié)議可以看做是SSL的升級版本子刮,其實大部分情況下他們都指代一個東西。
建立一個可靠的HTTPS連接涉及到四次通信:
第一次:客戶端-->服務器:
主要提供以下信息:
- 支持的協(xié)議版本窑睁,比如TLS1.0
- 支持的加密方法挺峡,比如RSA公鑰加密
- 支持的壓縮方法
一個客戶端生成的隨機數(shù),稍后用于生成“對話密鑰”
第二次:服務器-->客戶端
主要提供以下信息:
- 確認使用的協(xié)議版本担钮,如果不符合就關閉通信
- 確認使用的加密方法
服務器證書(包含給客戶端使用的公鑰)
一個服務器生成的隨機數(shù)橱赠,稍后用于生成“對話密鑰”
第三次:客戶端-->服務器
一個客戶端生成的隨機數(shù)。該隨機數(shù)用服務器公鑰加密箫津,防止被竊聽狭姨。
- 編碼改變通知,表示隨后的信息都將用
雙方商定的加密方法和密鑰發(fā)送
- 客戶端握手結束通知鲤嫡,表示客戶端的握手階段已經(jīng)結束。這一項同時也是前面發(fā)送的所有內(nèi)容的hash值绑莺,用來供服務器校驗暖眼。
第四次:服務器-->客戶端
- 編碼改變通知,表示隨后的信息都將用
雙方商定的加密方法和密鑰發(fā)送
- 服務器握手結束通知纺裁,表示服務器的握手階段已經(jīng)結束诫肠。這一項同時也是前面發(fā)送的所有內(nèi)容的hash值,用來供客戶端校驗欺缘。
至此栋豫,整個握手階段全部結束。接下來谚殊,客戶端與服務器進入加密通信丧鸯,就完全是使用普通的HTTP協(xié)議,只不過用"對話密鑰"加密內(nèi)容嫩絮。
這里有需要注意的幾點:
- 服務器提供給客戶端的證書中包含公鑰丛肢。對于非對稱加密RSA來說,對于
公鑰加密的內(nèi)容剿干,只有私鑰才能解密
蜂怎。 - 證書是分級的,稱為證書鏈置尔。下一級證書的摘要由上一級證書的私鑰簽名杠步。
簽名和加密不一樣,簽名是要用私鑰簽,用公鑰驗證的幽歼,剛好相反朵锣。
當需要驗證下一級的證書是否可靠的時候,我們用上一級證書提供的公鑰對簽名的摘要進行解密试躏,然后把解密出來的摘要和我們自己計算出來的下一級證書摘要進行對比猪勇,如果完全一致,就說明下一級證書是可靠的颠蕴,從而完成驗證泣刹。 - 當驗證到受信任的根證書時,就能夠確定要驗證的證書是可信任的了犀被。根證書一般由數(shù)字證書認證機構CA頒發(fā)椅您,在你的瀏覽器的可信任證書列表里面,瀏覽器根據(jù)這個列表來判斷根證書是否可信寡键。
- 隨機數(shù)總共有三個掀泳,其中第三個是用公鑰加密的,其他兩個都是明文的西轩。之所以使用三個隨機數(shù)员舵,是為了確保生成的“對話秘鑰(Session Key)”不容易被破解