能夠看到 HTTPS的網站,在瀏覽器的地址欄內會出現一個帶鎖的標記。html
HTTPS並不是是應用層一個新的協議,一般 HTTP 直接和 TCP 通訊,HTTPS則先和安全層(SSL/TLS)通訊,而後安全層再和 TCP 層通訊。git
SSL/TLS協議就是爲了解決上面提到的HTTP存在的問題而生的,下面咱們來看一下它是怎麼解決的:瀏覽器
加密和解密同用一個祕鑰的方式稱爲 共享祕鑰加密,也被叫作對稱祕鑰加密。安全
client_random
和一系列加密方法server_random
和加密方法現有瀏覽器和服務器有了三個相同的憑證:client_random
、server_random
和加密方法 用加密方法把 client_random
、server_random
兩個隨機數混合起來,生成祕鑰,這個密鑰就是瀏覽器和服務端通訊的暗號。服務器
存在的問題:第三方能夠在中間獲取到client_random
、server_random
和加密方法,因爲這個加密方法同時能夠解密,因此中間人能夠成功對暗號進行解密,拿到數據,很容易就將這種加密方式識破了。dom
以後瀏覽器經過公鑰將數據加密傳輸給服務端,服務端收到數據使用私鑰進行解密。服務端給瀏覽器發送數據,則使用私鑰進行加密,瀏覽器收到服務端發送過來的數據,使用公鑰進行解密。post
存在的問題:網站
傳輸數據階段依然使用對稱加密,可是對稱加密的祕鑰咱們採用非對稱加密傳輸。加密
到此爲止,服務器和瀏覽器就有了相同的 client_random
、server_random
和 pre_master
, 而後服務器和瀏覽器會使用這三組隨機數生成對稱祕鑰。有了對稱祕鑰以後,雙方就可使用對稱加密的方式來傳輸數據了。code
使用對稱和非對稱混合的方式,實現了數據的加密傳輸。可是這種仍然存在一個問題,服務器多是被黑客冒充的。這樣,瀏覽器訪問的就是黑客的服務器,黑客能夠在本身的服務器上實現公鑰和私鑰,而對瀏覽器來講,它並不徹底知道如今訪問的是這個是黑客的站點。
服務器須要證實本身的身份,須要使用權威機構頒發的證書,這個權威機構就是 CA(Certificate Authority), 頒發的證書就稱爲數字證書 (Digital Certificate)。
對於瀏覽器來講,數字證書有兩個做用:
下面咱們來看一下含有數字證書的HTTPS的請求流程
相對於不含數字證書的HTTPS請求流程,主要如下兩點改動