思考問題的順序
學技術時,老是會問什麼?這裏也不例外,https爲何會存在,它有什麼優勢,又有什麼缺點?爲何網站有的用http,有的用https?若是不能很好的回答,就往下看吧。算法
http通訊存在的問題
容易被監聽
http通訊都是明文,數據在客戶端與服務器通訊過程當中,任何一點均可能被劫持。好比,發送了銀行卡號和密碼,hacker劫取到數據,就能看到卡號和密碼,這是很危險的
被假裝
http通訊時,沒法保證通行雙方是合法的,通訊方多是假裝的。好比你請求www.taobao.com,你怎麼知道返回的數據就是來自淘寶,中間人可能返回數據假裝成淘寶。
被篡改
hacker中間篡改數據後,接收方並不知道數據已經被更改
共享密鑰加密和公開密鑰加密
後續內容的須要,這裏插播一段共享密鑰加密和公開密鑰加密安全
共享密鑰加密
共享密鑰的加密密鑰和解密密鑰是相同的,因此又稱爲對稱密鑰
公開密鑰加密
加密算法是公開的,密鑰是保密的。公開密鑰分爲私有密鑰和公有密鑰,公有密鑰是公開的,任何人(客戶端)均可以獲取,客戶端使用公有密鑰加密數據,服務端用私有密鑰解密數據。
異同
共享密鑰加密與公開密鑰加密相比,加解密處理速度快,但公開密鑰更適應互聯網下使用
https解決的問題
https很好的解決了http的三個缺點(被監聽、被篡改、被假裝),https不是一種新的協議,它是http+SSL(TLS)的結合體,SSL是一種獨立協議,因此其它協議好比smtp等也能夠跟ssl結合。https改變了通訊方式,它由之前的http—–>tcp,改成http——>SSL—–>tcp;https採用了共享密鑰加密+公開密鑰加密的方式服務器
防監聽
數據是加密的,因此監聽獲得的數據是密文,hacker看不懂。
防假裝
假裝分爲客戶端假裝和服務器假裝,通訊雙方攜帶證書,證書至關於身份證,有證書就認爲合法,沒有證書就認爲非法,證書由第三方頒佈,很難僞造
防篡改
https對數據作了摘要,篡改數據會被感知到。hacker即便從中改了數據也白搭。
https鏈接過程
服務器端須要認證的通訊過程tcp
客戶端發送請求到服務器端
服務器端返回證書和公開密鑰,公開密鑰做爲證書的一部分而存在
客戶端驗證證書和公開密鑰的有效性,若是有效,則生成共享密鑰並使用公開密鑰加密發送到服務器端
服務器端使用私有密鑰解密數據,並使用收到的共享密鑰加密數據,發送到客戶端
客戶端使用共享密鑰解密數據
SSL加密創建………
客戶端認證的通訊的過程
客戶端須要認證的過程跟服務器端須要認證的過程基本相同,而且少了最開始的兩步。這種狀況都是證書存儲在客戶端,而且應用場景比較少,通常金融才使用,好比支付寶、銀行客戶端都須要安裝證書
後續的問題
怎樣保證公開密鑰的有效性
你也許會想到,怎麼保證客戶端收到的公開密鑰是合法的,不是僞造的,證書很好的完成了這個任務。證書由權威的第三方機構頒發,而且對公開密鑰作了簽名。
https的缺點
https保證了通訊的安全,但帶來了加密解密消耗計算機cpu資源的問題 ,不過,有專門的https加解密硬件服務器
各大互聯網公司,百度、淘寶、支付寶、知乎都使用https協議,爲何?
支付寶涉及到金融,因此出於安全考慮採用https這個,能夠理解,爲何百度、知乎等也採用這種方式?爲了防止運營商劫持!http通訊時,運營商在數據中插入各類廣告,用戶看到後,怒火發到互聯網公司,其實這些壞事都是運營商(移動、聯通、電信)乾的,用了https,運營商就無法插播廣告篡改數據了。
以上內容,來自我的對《圖解HTTP》一書中https通訊部分的理解,加上知乎牛人解答的理解,彙總而成
---------------------
原文:https://blog.csdn.net/wangjun5159/article/details/51510594
網站