Https詳解
1.什么是Https
Http + SSL = Https
一句話說:Https是身披SSL的Http,當使用了SSL后,Http先和SSL通信,再由SSL和TCP通信,
2.為什么需要Https
在用Http協議時,主要可能存在以下三個問題。
- 1.通信使用明文,內容可能會被竊聽。
- 2.不驗證通信方的身份,可能遭遇偽裝。
- 3.無法證明報文是否完整,可能遭到篡改
相應的,Https就是解決上述三個問題
- 1.數據隱私:內容經過對稱加密。
- 2.身份認證:第三方無法偽造身份。
- 3.數據完整性:內容傳輸經過完整性校驗。
所以也可以這樣說:
Http+加密+認證+完整性保護=Https
3.加密
3.1 對稱加密
加密和解密使用同一個密鑰,想要加密信息,那就需要把密鑰傳給客戶端,只能通過光盤拷給對方,不能在網絡上傳輸,因為很容易就被其他人獲得密鑰,這樣誰都可以解密信息了,失去了加密的意義。優點是效率高
3.2 非對稱加密
是一個密鑰對,一把公鑰,一把私鑰,公鑰任何人都能獲得,但是私鑰只有自己知道,發送方使用公鑰加密,接收方收到后使用私鑰解密,只有公鑰信息也不能做到解密。缺點是加密解密需要一定時間。
3.3 對稱加密+非對稱加密
為了結合效率高且安全加密,使用兩者混合:在交換密鑰環節使用非對稱加密,數據傳輸時用對稱加密。具體是:發送密文的一方使用對方的公鑰加密對稱密鑰,然后用對稱密鑰加密文件,接收方用私鑰解密對稱密鑰,用對稱密鑰解密文件。
4.數字簽名
數字簽名是用來解決數據可能遭到篡改的情況,即校驗數據完整性。
實現:A在發送文件前,先用單向散列函數(Hash)生成消息摘要,然后再用A私鑰進行加密生成數字簽名,然后將其與文件和A公鑰一起發給B,B收到后先對文件使用相同的散列函數得到摘要,然后用A的公鑰解密數字簽名得到原來的摘要,兩個摘要進行對比,若不相同,則證明文件被篡改。
數字簽名的特點就是發送文件不加密,但不能更改,比如發送紅頭文件到各個地方或者官方群發特定通知,文件本身不是機密,但不能更改;
問題:A的公鑰怎么傳給B,或者說如何證明這個公鑰就是A的。比如C可以用自己的私鑰生成數字簽名,然后把自己的公鑰給A,然后冒充B
5.CA證書
CA證書是為了解決通信方身份被偽裝的問題。
CA機構使用散列函數將證書上的明文信息(申請者公鑰,申請者信息等)計算得到信息摘要,然后用CA私鑰加密得到數字簽名,然后將證書和數字簽名一起發給客戶端,客戶端得到后,使用CA公鑰對數字簽名解密得到摘要,然后對證書計算得到摘要,將兩者對比如果一樣表示證書沒有被中間人篡改過,確認證書的合法性,也就是服務器的公鑰是值得信賴的。
注:即使中間人有CA公鑰,能夠解析數字簽名並篡改,但是篡改完成后中間人仍然需要將證書重新加密,但是中間人沒有CA私鑰,無法加密,強行加密會導致客戶端無法解密(客戶端只認那幾個權威機構的公鑰)。
6.公鑰和私鑰
要明白兩種用法:
- 1.公鑰加密,私鑰解密 -- 用於傳輸密文
- 2.私鑰簽名,公鑰驗證 -- 用於簽名
第一種情景:既然是加密,那肯定不想讓別人知道我的信息,只有我才能解密,所以公鑰加密,私鑰解密。這過程中信息不可見,但是可能被篡改。
第二種情景:既然是簽名,我就不希望別人冒充我發信息,只有我才能發,所以是私鑰簽名,公鑰驗證。這過程中信息不可篡改,但是他人可以獲得。
7.Https工作流程
1、客戶端發起一個https請求,根據規定,知道需要連接服務器的443端口。
2、服務器把配置好的公鑰證書返回給客戶端。
3、客戶端驗證公鑰證書,比如是否在有效期內等信息。如果驗證通過則繼續,不通過則顯示警告信息。
客戶端拿CA機構的公鑰解密數字簽名,得到摘要,然后用散列函數計算證書得到摘要,對兩個摘要進行對比,驗證證書是否被篡改,服務器公鑰是否可靠。
4、客戶端使用偽隨機數生成加密要用的對稱密鑰,然后用證書的公鑰加密這個對稱密鑰,發給服務端。
5、服務端使用自己的私鑰解密這個消息,得到對稱密鑰,現在,服務器和客戶端都擁有了相同的對稱密鑰。(所以使用https開始的時候會有點慢)
6、服務器用對稱密鑰加密明文內容A,發給客戶端。
7、客戶端使用對稱密鑰解密密文,得到明文內容A。
8.https和http區別
- http是明文傳輸,而https是使用SSL+http構成的加密傳輸,更安全。
- http使用80端口,https使用443端口
- http基於應用層,而https基於傳輸層