更新時間:2018-07-24 來源:黑馬程序員 瀏覽量:
在web開發(fā)學(xué)習(xí)中,我們會很頻繁的接觸到HTTP這個協(xié)議。從概念上來說,超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。所有的WWW文件都必須遵守這個標準。通俗來講,HTTP就是瀏覽器和服務(wù)器進行交互數(shù)據(jù)時,雙方都要遵守的數(shù)據(jù)格式規(guī)范。
舉個例子:
兩個人寫信,需要都遵守一些規(guī)則才能互相看懂對方的意思——開頭是對方稱呼,結(jié)尾是自己的落款,否則數(shù)據(jù)格式就亂套了,寫的信誰也看不懂寫的是什么。
而HTTPS又是什么呢,其實HTTPS就是在HTTP的基礎(chǔ)上加了個S,也就是“Secure”,即安全。我們知道,HTTP協(xié)議本身是沒有任何安全考慮的,數(shù)據(jù)以明文傳輸,GET方式傳遞的參數(shù)甚至直接就在地址欄上顯示出來,即使使用其他方式傳參,也能很輕易的就把數(shù)據(jù)抓包獲取到,讓一些心懷不軌的人所利用,甚至偽造請求發(fā)送一些假數(shù)據(jù),所以HTTP的年代,大家都在自己想辦法解決數(shù)據(jù)安全問題,自己加密或者添加校驗等,而HTTPS就是用來從根本上解決這個問題的。那么今天我們主要聊一聊 HTTPS 到底安全在哪。
從上圖可以看到,HTTPS 就是在 HTTP 下加入了 SSL 層,從而保護了交換數(shù)據(jù)隱私和完整性,提供對網(wǎng)站服務(wù)器身份認證的功能,所以簡單來說它就是安全版的 HTTP。
SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議。TLS與SSL在傳輸層對網(wǎng)絡(luò)連接進行加密?,F(xiàn)在隨著技術(shù)的發(fā)展,TLS 得到了廣泛的應(yīng)用,關(guān)于 SSL 與 TLS 的差別,我們不用在意,只要知道 TLS 是 SSL 的升級版本就好。
一般來說,HTTPS 主要用途有三個:
一是通過證書等信息確認網(wǎng)站的真實性;
二是建立加密的信息通道;
三是數(shù)據(jù)內(nèi)容的完整性。
上圖就是一個HTTPS的鏈接打開后的樣子,我們可以通過點擊瀏覽器地址欄鎖標志來查看網(wǎng)站認證之后的真實信息,SSL證書保證了網(wǎng)站的唯一性與真實性。
那么加密的信息通道又加密了哪些信息呢?
簽發(fā)證書的 CA 中心會發(fā)布一種權(quán)威性的電子文檔——數(shù)字證書,它可以通過加密技術(shù)(對稱加密與非對稱加密)對我們在網(wǎng)上傳輸?shù)男畔⑦M行加密,比如我在 網(wǎng)站 上輸入:
賬號:cbssfaw
密碼:123djaosid
可是這個數(shù)據(jù)被黑客攔截盜竊了,那么加密后,黑客得到的數(shù)據(jù)可能就是這樣的:
賬號:)》﹝'!#﹡﹡
密碼:$﹩ˉ﹔〈〉"“
最后一個就是驗證數(shù)據(jù)的完整性,當(dāng)數(shù)據(jù)包經(jīng)過無數(shù)次路由器轉(zhuǎn)發(fā)后會發(fā)生數(shù)據(jù)劫持,黑客將數(shù)據(jù)劫持后進行篡改,比如植入木馬。開啟HTTPS后黑客就無法對數(shù)據(jù)進行篡改,就算真的被篡改了,我們也可以檢測出問題。
而加密方式分為對稱加密和非對稱加密兩種。
對稱加密是指加密與解密的使用同一個密鑰的加密算法。目前常見的加密算法有:DES、AES、IDEA 等。
非對稱加密使用的是兩個密鑰,公鑰與私鑰,我們會使用公鑰對網(wǎng)站賬號密碼等數(shù)據(jù)進行加密,再用私鑰對數(shù)據(jù)進行解密。這個公鑰會發(fā)給查看網(wǎng)站的所有人,而私鑰是只有網(wǎng)站服務(wù)器自己擁有的。目前常見非對稱加密算法:RSA,DSA,DH等。 簡單的總結(jié)一下:
HTTPS和HTTP的區(qū)別主要為以下四點:
一、https協(xié)議需要到ca申請證書,一般免費證書很少,需要交費。所以現(xiàn)在雖然都在提倡使用HTTPS而淘汰掉HTTP,但是還是有大量的網(wǎng)站由于成本問題,或者數(shù)據(jù)傳輸不是那么敏感,所以依舊使用HTTP作為傳輸協(xié)議。
二、http是超文本傳輸協(xié)議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協(xié)議。
三、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。這個在我們服務(wù)器端編程的時候比較重要,因為我們習(xí)慣把默認端口設(shè)置為80來監(jiān)聽HTTP很久了,所以如果使用了HTTPS的話,要扭轉(zhuǎn)一下觀念,不要習(xí)慣性的使用80端口了。
四、http的連接很簡單,是無狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進行加密傳輸、身份認證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全。
通過上文,我們已經(jīng)知道,HTTPS 就是在 HTTP 傳輸協(xié)議的基礎(chǔ)上對網(wǎng)站進行認證,給予它獨一無二的身份證明,再對網(wǎng)站數(shù)據(jù)進行加密,并對傳輸?shù)臄?shù)據(jù)進行完整性驗證。HTTPS 作為一種加密手段不僅加密了數(shù)據(jù),還給了網(wǎng)站一張身份證。 總之,HTTPS從各個角度去考慮了怎么讓數(shù)據(jù)傳輸更安全的問題,這個“S”添加的當(dāng)之無愧?,F(xiàn)在,大家對HTTPS和HTTP的區(qū)別有了明確的認識了吧。
作者:黑馬程序員前端與移動開發(fā)培訓(xùn)學(xué)院
首發(fā):http://web.itheima.com/