HTTP協議是如何實現“祕密互動”的?
你知道HTTP訪問的互動過程嗎?
如題,可能有很多並不瞭解,本文將簡單地介紹一下當你訪問某網站時你的電腦與網站之間的資料互動過程。
大家都知道去訪問網站都是使用瀏覽器,在位址列中輸入你想訪問的連結,按個回車就能開啟相應的網站。然後就可以盡情得瀏覽網頁內容了。
那你知道WEB頁面如何呈現的嗎?
網頁內容肯定不會憑空出現,當你在瀏覽器位址列中輸入URL(連結)時,WEB瀏覽器會發送相應的WEB請求資訊到目標網站(伺服器),當目標網站伺服器接收到請求時伺服器迴應相應的內容給你的瀏覽器(客戶端),這樣你就看到了網頁內容。
不過這只是基本的訪問過程。這也是HTTP或HTTPS協議的資料互動的過程,但這個看似非常簡單的互動過程中隱藏著很多小互動過程,下面就來一個一個研究一下。
HTTP和HTTPS的區別
首先,先來掃個盲,平常我們在瀏覽網頁的時候可有很少關注這個網站是使用什麼協議進行互動的,網頁資料互動分為兩種方式,一種就叫HTTP,別一種叫HTTPS。這兩種方式我們都統稱是HTTP協議,但卻各有技術上的不同點。
一般情況下,如果你訪問的網頁不需要你登陸或者並沒有登陸入口的這種網站通常情況下都會使用HTTP,但這不是絕對的,有些網站可能並不是這樣的。那怎麼樣的網站才叫使用HTTP協議的呢?看下圖:
這是一個典型的HTTP協議互動的網站,看圖中標識的位置,在位址列中的最開始位置,有個“不安全”提示,在URL的最前端也沒有任何標識。除了這種HTTP協議互動的網站以外呢就是HTTPS互動的網站的,這一類的網站是比較多的。
一般情況下,當這個網站需要登陸或者有登陸入口的,又或者這個網站提供了使用者資料的這一類網站通常都是HTTPS的,這類的網站非常多,比如網銀,比如郵箱等,又比如拼客學院官網:
看位址列當中,明顯與HTTP協議互動的網站不一樣,位址列位置沒有標識不安全,而且在URL的最前面標識了HTTPS://協議,這就是典型的HTTPS。我剛才說只要有登陸入口或者需要登陸網站基本都是用HTTPS,請注意,這不是絕對,你去看看上面4399小遊戲那個網站,也是可以登陸的,這個網站可沒有使用HTTPS協議哦。
上面介紹了兩個協議,那這兩個協議僅僅只是URL不一樣這麼簡單嗎?答案肯定不是的,我剛才有提到登陸,有登陸一般是HTTPS,沒有則一般是HTTP。既然關係到登陸,那就一定跟使用者資料有關係,那就需要有安全的保證,從上圖HTTP協議的URL中也看到不安全提示,意思也就是沒有安全的保證,使用者的資料有可能會被竊取,因此,HTTPS是安全的,HTTP則是不安全的。
它們的安全性主要體現在你的電腦(客戶端)與目標網站伺服器之間,當你去訪問網站時,你的登陸資訊,你的個人資訊是被加密傳送的,如果在傳送資料中間,有黑客獲取了你的資料也不擔心,黑客一般無法破解你的資訊,這個過程是安全的。而HTTP則不同了,黑客可以不費任何力氣地得到你的資訊,看下圖:
從上圖看,黑客在網路中竊取了使用者與Web伺服器互動的資料,但拿到的資訊只是亂碼,並不能正常顯示,也沒辦法破解。因此即使使用者傳送的是使用者名稱密碼這樣的重要資訊也不怕被竊取。
從上圖來看,使用HTTP協議來進行傳遞使用者名稱密碼,黑客在網路中獲取了互動資訊,可以輕鬆地檢視到使用者傳送的使用者名稱資訊,這是一個非常危險的動作,如果你傳送的是銀行卡賬號密碼的話後果將會很嚴重……
從上面兩張圖的對比不難得出結論,HTTPS是加密的,而HTTP是沒有加密的,因此黑客能夠直接檢視到使用者名稱密碼。在實際生活中我們常用的網站基本都是基於HTTPS協議的,大家也不必感到驚慌,日常使用其實還是很安全的。
關於加密的問題
01 非對稱金鑰演算法
在HTTPS協議中使用RSA加密演算法,這種加密演算法是一種非對稱加密演算法,廣泛用於網頁加密。
非對稱金鑰演算法會產生公鑰和私鑰兩種金鑰,一種用於加密,另一種就用於解密,而且兩個金鑰是完全不一樣完全不可相互推導。公鑰是傳送給所有人的,而私鑰是擁有者自己妥善保管的。
它的工作過程是:使用者要把重要的東西加密會用接收者的公鑰對資料進行加密,然後將加密後的檔案傳送到接收端,接收者接收到加密的檔案後用自己的私鑰對其進行解密就能夠得到明文。如下圖所示:
明文使用接收方的公鑰對其加密就得到密文了,這個過程就是加密的過程,密文在網際網路中傳遞時不用擔心被竊取的問題。當密文被傳遞到接收端,接收方再使用自己的私鑰對其解密,這個過程就是解密的過程。
這個方法看似很好用,但實際上並不是這樣的,因為像這樣的非對稱金鑰演算法只有夠加密很小小的資料,超過幾百KB的檔案都無法加密或加密需要非常長的時間,實際的應用中資料傳遞可不止區區幾百KB這麼點,因此非對稱金鑰演算法只能加密金鑰等資料非常小的東西,沒錯,你沒看錯,就是加密金鑰。那實際應用中這麼大的資料又是怎麼加密的?下面就再來講講對稱金鑰演算法。
02 對稱金鑰演算法
對稱金鑰演算法常見的有AES,DES,3DES等,對稱金鑰演算法與非對稱金鑰演算法不同的是對資料進行加密和解密時用同一個密碼,這個密碼是同計算機隨機生成的。對稱金鑰演算法的特點是加密速度很快且加密後的密文資料與原始的明文資料大小相差不會很大,比如加密1K的資料,加密後的密文可能只有1.1K,因此這種加密演算法比較適合加密比較大的檔案。
客戶端在傳送資料到伺服器端的時候會使用AES等對稱金鑰演算法對需要加密的資料進行加密,加密會產生一個對稱金鑰的密碼,然後再將這個密碼用RSA非對稱金鑰來加密金鑰。
為什麼要用RSA來加密金鑰?很顯然嘛,我把資料用一把鑰匙加密了,對方想要開啟資料就必須要用我這把鑰匙才能開啟,那我該怎麼樣把這把鑰匙安全的送到對方手上?就是通過RSA來傳遞。
HTTPS是如何完整地並且安全地傳遞使用者資料的
下面就來看看它的加密與解密過程:
1.使用者傳送請求到伺服器,伺服器接收到以後迴應相應的請求資訊(在這個迴應資訊裡面伺服器會帶上證書和一個伺服器的公鑰)。
2.客戶端拿到證書後會先判斷一下這個證書的有效性(其實證書的作用是伺服器向你表明身份,讓你知道現在迴應你WEB資訊的正是你要訪問的那個伺服器)。
3.客戶端將要傳送的資料先用對稱金鑰演算法對其先加密,產生的密文先放一邊。
4.拿剛才加密產生的密文用剛才伺服器傳送過來的公鑰對這個密文加密,產生加密後的密碼。
5.把這個加過密的密碼與剛才使用對稱金鑰演算法加密後的密文一起打包發給伺服器。
6.伺服器接收到這些東西以後首先拿出加過密的密碼,用自己的私鑰對其解密,得出密文,再對這個密文使用對稱金鑰演算法進行解密,這樣,伺服器就收到了客戶端傳送的資料了。
過程如下圖:
如上加密過程可以保證資料的安全性,這是一個經典的資料加密通訊的過程,這種解決方案在很多地方都有用到,不同的僅僅是加密演算法的差異。