http協(xié)議是目前非常普及的應(yīng)用層傳輸協(xié)議,了解https之前要先知道http的缺點(diǎn).
1.通信使用明文(不加密),內(nèi)容可能被竊聽.(抓包工具可以獲取請(qǐng)求和響應(yīng)內(nèi)容)
2.不驗(yàn)證通訊方的身份,可能遭遇偽裝.(任何人都能發(fā)送請(qǐng)求,不管對(duì)方是誰都會(huì)返回響應(yīng)).
3.無法證明報(bào)文的完整性,可能會(huì)遭篡改.(沒有辦法確認(rèn)發(fā)出的請(qǐng)求/響應(yīng)和接收到的請(qǐng)求/響應(yīng)前后一致)
這些問題不止會(huì)在http上出現(xiàn),在其他未加密的協(xié)議中也會(huì)出現(xiàn)這類問題
HTTP+加密+認(rèn)證+完整性保護(hù) = HTTPS.
為了解決上述問題,需要再http上再加入加密處理和認(rèn)證等機(jī)制.我們把添加了加密和認(rèn)證機(jī)制的http稱之為https(http secure)
HTTPS是身披SSL保護(hù)外衣的HTTP
HTTPS并非應(yīng)用層的一種新協(xié)議,只是http通訊接口部分用SSL(secure socket layer)和TLS(transport layer security)協(xié)議代替.
通常http直接和tcp通信.當(dāng)使用ssl時(shí),則演變成先和ssl通信,再由ssl和tcp通訊.所謂https其實(shí)就是身披ssl保護(hù)外衣的http.
HTTPS采用混合機(jī)密機(jī)制
在對(duì)ssl了解之前先了解兩種加密技術(shù).
公開密鑰加密(public-key cryptography)->加密算法是公開的,而密鑰是保密的.加密和解密都會(huì)用到密鑰.但反過來說只要持有密鑰就能解密.
共享密鑰加密(common key crypto system)->也被叫做對(duì)密鑰加密.以共享密鑰方式加密時(shí)必須將密鑰也發(fā)給對(duì)方.在互聯(lián)網(wǎng)上轉(zhuǎn)發(fā)密鑰時(shí),如果通信被監(jiān)聽那么密鑰就會(huì)落入攻擊者之手,另外還得設(shè)法安全的保管接收到的密鑰.
使用兩把密鑰的公開密鑰加密
公開密鑰加密使用一對(duì)非對(duì)稱的密鑰.一把私鑰一把公鑰.私鑰不能讓任何人知道,公鑰任何人都能獲得.也就是發(fā)送密文一方使用對(duì)方的公鑰進(jìn)行加密處理,對(duì)方收到被加密的信息后,再使用自己的的私鑰進(jìn)行解密.利用這種方法不需要發(fā)送用來解密的私鑰,也不必?fù)?dān)心密鑰被盜走.
https采用共享密鑰加密和公開密鑰加密兩者并用的混合加密機(jī)制.若密鑰能夠?qū)崿F(xiàn)安全交換,那么有可能會(huì)考慮僅適用公開密鑰加密來通信.但是公開密鑰加密與共享密鑰加密相比,其處理速度要慢.
所以應(yīng)充分利用兩者各有的有事,將多種方法組合起來用于通信.在交換密鑰環(huán)節(jié)適用公開密鑰加密方式,之后的建立通信交換報(bào)文階段則適用共享加密方式.
證明公開密鑰正確性的證書
公開密鑰加密方式存在一些問題,無法證實(shí)公鑰真?zhèn)?為了解決這個(gè)問題,可以使用由數(shù)字證書認(rèn)證機(jī)構(gòu)(CA,certificate authority)和其相關(guān)頒發(fā)的公鑰證書.
可證明組織真實(shí)性的EV SSL證書
證書的一個(gè)作用是用來證明作為通信乙方的服務(wù)器是否規(guī)范,另外一個(gè)作用就是確認(rèn)對(duì)方服務(wù)器背后運(yùn)營的企業(yè)是否真實(shí)存在.擁有該特性的證書就是EV SSL證書(extended validation SSL certificate)
EV SSL證書是基于國際標(biāo)準(zhǔn)的認(rèn)證指導(dǎo)方針頒發(fā)的證書.通過認(rèn)證的web網(wǎng)站能夠獲得更高的認(rèn)可度.
持有EV SSL證書的web網(wǎng)站瀏覽器地址欄處的背景是綠色的.點(diǎn)擊后可以查看詳情
用以確認(rèn)客戶端的客戶端證書
HTTPS中還可以使用客戶端證書.以客戶端證書進(jìn)行客戶端認(rèn)證,證明服務(wù)器正在通信的對(duì)方始終是預(yù)料之內(nèi)的客戶端,起作用跟服務(wù)器證書如出一轍.
想獲取證書時(shí),用戶需要自行安裝客戶端證書,證書是付費(fèi)購買的,且每張證書對(duì)應(yīng)到每位用戶也就意味著需支付和用戶數(shù)對(duì)等的費(fèi)用.另外要讓不同的用戶自行安裝證書,這件事本身也是充滿了挑戰(zhàn).
現(xiàn)狀是,安全性極高的認(rèn)證機(jī)構(gòu)可頒發(fā)客戶端證書但僅用于特殊用途的業(yè)務(wù).比如銀行的網(wǎng)銀就采用客戶端證書.客戶端證書另一個(gè)問題只能證明客戶端實(shí)際存在,而不能用來證明用戶本人的真實(shí).
由自認(rèn)證機(jī)構(gòu)頒發(fā)的證書成為自簽名證書
如果使用openSSL這套開源程序,都可以構(gòu)建一套屬于自己的認(rèn)證機(jī)構(gòu),從而自己給自己頒發(fā)服務(wù)器證書.但該服務(wù)器證書在互聯(lián)網(wǎng)不可作為證書使用.
獨(dú)立構(gòu)建的認(rèn)證機(jī)構(gòu)叫做自認(rèn)證機(jī)構(gòu)頒發(fā)的證書為"自簽名證書"
瀏覽器訪問該服務(wù)器時(shí),會(huì)顯示"無法確認(rèn)連接安全性"或"該網(wǎng)站的安全證書存在問題"等
之所以這樣原因是它無法消除偽裝的可能性.值得信賴的第三方機(jī)構(gòu)介入認(rèn)證,才能讓已植入在瀏覽器內(nèi)的認(rèn)證機(jī)構(gòu)頒布的公鑰發(fā)揮作用,并證明服務(wù)器的真實(shí)性.
ps:中級(jí)認(rèn)證機(jī)構(gòu)的證書,某些瀏覽器會(huì)以正規(guī)的證書來對(duì)待,可有的瀏覽器會(huì)當(dāng)做自簽名證書.
HTTPS的安全通信機(jī)制
為了更好地理解HTTPS,我們觀察一下HTTPS的通信步驟
1.客戶端通過發(fā)送client hello報(bào)文開始SSL通信.報(bào)文中包含客戶端支持的SSL指定版本,加密組件列表(所使用的加密算法 密鑰長度等)
2.服務(wù)器可進(jìn)行SSL通信時(shí),會(huì)議Server Hello報(bào)文作文回應(yīng).報(bào)文中含SSL版本 加密組件.服務(wù)器的加密組件內(nèi)容是從接受客戶端加密組件內(nèi)篩選出來的.
3.之后服務(wù)器發(fā)送certificate報(bào)文.報(bào)文中包好公開密鑰證書.
4.服務(wù)器發(fā)送server hello done報(bào)文通知客戶端.最初階段握手協(xié)商部分結(jié)束.
5.SSL第一次握手結(jié)束后,客戶端以client key exchange報(bào)文作為回應(yīng).報(bào)文包含通信加密中使用的隨機(jī)密碼串.該報(bào)文已用步驟3中的公鑰加密;
6.客戶端繼續(xù)發(fā)送change cipher spec報(bào)文.該報(bào)文會(huì)提示想服務(wù)器,在此報(bào)文之后的通訊會(huì)采用pre-master secret密鑰加密
7.客戶端發(fā)送finished報(bào)文 該報(bào)文包含連接至今前部報(bào)文的整體校驗(yàn)值.這次握手協(xié)商是否成功,要以服務(wù)器是否能夠正確解密該報(bào)文作文判定標(biāo)準(zhǔn).
8.服務(wù)器同樣發(fā)送change cipher spec報(bào)文
9.服務(wù)器同樣發(fā)送finished報(bào)文
10.C&S finishe報(bào)文交換完畢之后,ssl連接就算建立完成.通信會(huì)受到SSL的保護(hù).從此開始進(jìn)行應(yīng)用層的協(xié)議通信,即發(fā)送HTTP響應(yīng)
11.應(yīng)用層協(xié)議通信,即發(fā)送HTTP響應(yīng)
12.最后客戶端斷開連接.斷開連接時(shí),發(fā)送close_notity報(bào)文.上圖做了一些省略
在以上流程中,應(yīng)用層發(fā)送數(shù)據(jù)時(shí)會(huì)附加一種叫做MAC(message authentication code)的報(bào)文摘要.MAC能夠查知報(bào)文是佛遭到篡改.從而保護(hù)報(bào)文的完整性.
到此HTTP的問題基本都已經(jīng)解決啦,那HTTPS就沒有缺點(diǎn)嗎
SSL最大的問題所在就是慢!!
SSL的慢分兩種.一種指通信慢,另一種是指由于大量消耗CPU以及內(nèi)存資源,導(dǎo)致處理速度變慢.
和使用http相比網(wǎng)絡(luò)負(fù)載可能會(huì)變慢2到100倍.出去和TCP連接,發(fā)送HTTP請(qǐng)求&響應(yīng)以外,還必須進(jìn)行SSL通信,因此整體上處理通信量不可避免會(huì)增加.
另一點(diǎn)是SSL必須進(jìn)行加密處理.服務(wù)器和客戶端都要進(jìn)行加密和解密的處理.比起HTTP會(huì)更多的消耗服務(wù)器和客戶端的硬件資源,導(dǎo)致負(fù)載增強(qiáng).
針對(duì)速度變慢這一問題,并沒有根本性的解決方案,我們會(huì)使用SSL加速器(專用服務(wù)器)硬件來改善該問題.該硬件為SSL通信專用硬件,相對(duì)軟件來講,能夠提高數(shù)倍SSL的計(jì)算速度.僅在SSL處理時(shí)發(fā)揮SSL加速器的功效,以分擔(dān)負(fù)載.
為什么不一直使用HTTPS?
目前并非所有內(nèi)容都進(jìn)行加密處理,而是僅在那些需要信息隱藏時(shí)才會(huì)加密,以節(jié)約資源.除此之外購買證書的開銷一室原因之一
ps:SSL證書參考下面的消息;
免費(fèi)的目前有 2 個(gè)
國內(nèi)的:免費(fèi)SSL證書申請(qǐng)
國外的:StartSSL? Certificates & Public Key Infrastructure
備注:其實(shí)誉己,國內(nèi)的這家的根證書赐纱,也是startssl簽發(fā)的类缤,實(shí)際上還是等于是startssl提供的免費(fèi)證書氯析。
便宜的有很多家锈至,這里列舉幾個(gè):
Namecheap:Cheap SSL Certificates from $7.95/yr ? Namecheap.com
還是Namecheap:SSL Certificates. Buy Cheap SSL Certs from $4.99/yr
cheapssl:Cheap SSL Certificates. Buy or Renew Cheapest SSL at $4.80
再補(bǔ)充 2 個(gè)賣便宜 SSL 的:
Gogetssl:https://www.gogetssl.com/domain-validation/comodo-positive-ssl/
Starfieldtech:https://www.starfieldtech.com/
以上來自<圖解HTTP>