Http + SSL = Https
一句話說:Https是身披SSL的Http,當使用了SSL後,Http先和SSL通訊,再由SSL和TCP通訊,html
在用Http協議時,主要可能存在如下三個問題。git
相應的,Https就是解決上述三個問題segmentfault
因此也能夠這樣說:
Http+加密+認證+完整性保護=Https安全
加密和解密使用同一個密鑰,想要加密信息,那就須要把密鑰傳給客戶端,只能經過光盤拷給對方,不能在網絡上傳輸,由於很容易就被其餘人得到密鑰,這樣誰均可以解密信息了,失去了加密的意義。優勢是效率高服務器
是一個密鑰對,一把公鑰,一把私鑰,公鑰任何人都能得到,可是私鑰只有本身知道,發送方使用公鑰加密,接收方收到後使用私鑰解密,只有公鑰信息也不能作到解密。缺點是加密解密須要必定時間。網絡
爲告終合效率高且安全加密,使用二者混合:在交換密鑰環節使用非對稱加密,數據傳輸時用對稱加密。具體是:發送密文的一方使用對方的公鑰加密對稱密鑰,而後用對稱密鑰加密文件,接收方用私鑰解密對稱密鑰,用對稱密鑰解密文件。函數
數字簽名是用來解決數據可能遭到篡改的狀況,即校驗數據完整性。
實現:A在發送文件前,先用單向散列函數(Hash)生成消息摘要,而後再用A私鑰進行加密生成數字簽名,而後將其與文件和A公鑰一塊兒發給B,B收到後先對文件使用相同的散列函數獲得摘要,而後用A的公鑰解密數字簽名獲得原來的摘要,兩個摘要進行對比,若不相同,則證實文件被篡改。
數字簽名的特色就是發送文件不加密,但不能更改,好比發送紅頭文件到各個地方或者官方羣發特定通知,文件自己不是機密,但不能更改;
問題:A的公鑰怎麼傳給B,或者說如何證實這個公鑰就是A的。好比C能夠用本身的私鑰生成數字簽名,而後把本身的公鑰給A,而後冒充B加密
CA證書是爲了解決通訊方身份被假裝的問題。
CA機構使用散列函數將證書上的明文信息(申請者公鑰,申請者信息等)計算獲得信息摘要,而後用CA私鑰加密獲得數字簽名,而後將證書和數字簽名一塊兒發給客戶端,客戶端獲得後,使用CA公鑰對數字簽名解密獲得摘要,而後對證書計算獲得摘要,將二者對好比果同樣表示證書沒有被中間人篡改過,確認證書的合法性,也就是服務器的公鑰是值得信賴的。.net
注:即便中間人有CA公鑰,可以解析數字簽名並篡改,可是篡改完成後中間人仍然須要將證書從新加密,可是中間人沒有CA私鑰,沒法加密,強行加密會致使客戶端沒法解密(客戶端只認那幾個權威機構的公鑰)。htm
要明白兩種用法:
第一種情景:既然是加密,那確定不想讓別人知道個人信息,只有我才能解密,因此公鑰加密,私鑰解密。這過程當中信息不可見,可是可能被篡改。
第二種情景:既然是簽名,我就不但願別人冒充我發信息,只有我才能發,因此是私鑰簽名,公鑰驗證。這過程當中信息不可篡改,可是他人能夠得到。
一、客戶端發起一個https請求,根據規定,知道須要鏈接服務器的443端口。
二、服務器把配置好的公鑰證書返回給客戶端。
三、客戶端驗證公鑰證書,好比是否在有效期內等信息。若是驗證經過則繼續,不經過則顯示警告信息。
客戶端拿CA機構的公鑰解密數字簽名,獲得摘要,而後用散列函數計算證書獲得摘要,對兩個摘要進行對比,驗證證書是否被篡改,服務器公鑰是否可靠。
四、客戶端使用僞隨機數生成加密要用的對稱密鑰,而後用證書的公鑰加密這個對稱密鑰,發給服務端。
五、服務端使用本身的私鑰解密這個消息,獲得對稱密鑰,如今,服務器和客戶端都擁有了相同的對稱密鑰。(因此使用https開始的時候會有點慢)
六、服務器用對稱密鑰加密明文內容A,發給客戶端。
七、客戶端使用對稱密鑰解密密文,獲得明文內容A。