http://blog.csdn.net/wangjun5159/article/details/51510594
思考問題的順序
學技術時,總是會問什么?這里也不例外,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連接過程
服務器端需要認證的通信過程

- 客戶端發送請求到服務器端
- 服務器端返回證書和公開密鑰,公開密鑰作為證書的一部分而存在
- 客戶端驗證證書和公開密鑰的有效性,如果有效,則生成共享密鑰並使用公開密鑰加密發送到服務器端
- 服務器端使用私有密鑰解密數據,並使用收到的共享密鑰加密數據,發送到客戶端
- 客戶端使用共享密鑰解密數據
- SSL加密建立………
客戶端認證的通信的過程
- 客戶端需要認證的過程跟服務器端需要認證的過程基本相同,並且少了最開始的兩步。這種情況都是證書存儲在客戶端,並且應用場景比較少,一般金融才使用,比如支付寶、銀行客戶端都需要安裝證書
后續的問題
- 怎樣保證公開密鑰的有效性
- 你也許會想到,怎么保證客戶端收到的公開密鑰是合法的,不是偽造的,證書很好的完成了這個任務。證書由權威的第三方機構頒發,並且對公開密鑰做了簽名。
- https的缺點
- https保證了通信的安全,但帶來了加密解密消耗計算機cpu資源的問題 ,不過,有專門的https加解密硬件服務器
- 各大互聯網公司,百度、淘寶、支付寶、知乎都使用https協議,為什么?
- 支付寶涉及到金融,所以出於安全考慮采用https這個,可以理解,為什么百度、知乎等也采用這種方式?為了防止運營商劫持!http通信時,運營商在數據中插入各種廣告,用戶看到后,怒火發到互聯網公司,其實這些壞事都是運營商(移動、聯通、電信)干的,用了https,運營商就沒法插播廣告篡改數據了。
以上內容,來自個人對《圖解HTTP》一書中https通信部分的理解,加上知乎牛人解答的理解,匯總而成
