RedRain的簡(jiǎn)書(shū):http://www.reibang.com/users/29e03e6ff407/latest_articles
Http和Https的區(qū)別
1.什么是Http
Http中文叫做超文本傳輸協(xié)議
, 它完成客戶端到服務(wù)端等一系列運(yùn)作流程
1.1 與http關(guān)系密切的協(xié)議: IP, TCP和DNS
負(fù)責(zé)傳輸?shù)腎P協(xié)議
IP協(xié)議數(shù)據(jù)網(wǎng)絡(luò)層, IP協(xié)議的作用是把各類(lèi)數(shù)據(jù)包傳送給對(duì)方. 而要確保確實(shí)傳送到對(duì)方那里, 則需要滿足各類(lèi)條件. 其中兩個(gè)重要的條件是IP地址和MAC地址.
IP地址指明了節(jié)點(diǎn)被分配到的地址, MAC地址是指網(wǎng)卡所指的固定地址. IP地址和MAC地址進(jìn)行配對(duì), IP地址可以變換, 但是MAC地址基本不會(huì)更改.
確碧ǖ可靠性的TCP協(xié)議
TCP位于傳輸層, 提供可靠的字節(jié)流服務(wù)
字節(jié)流服務(wù): 為了方便傳輸, 將大塊數(shù)據(jù)分割成以報(bào)文段為單位的數(shù)據(jù)包進(jìn)行管理.
為了確保無(wú)誤將數(shù)據(jù)送達(dá)目標(biāo)處, TCP協(xié)議采用了三次握手策略.當(dāng)然除了三次握手策略, 還有很多其他的手段保證通訊的可靠性
負(fù)責(zé)域名解析的DNS服務(wù)
DNS服務(wù)是和HTTP協(xié)議一樣位于應(yīng)用層的協(xié)議. 他提供域名與IP地址之間的解析服務(wù).
因?yàn)橛涀∫唤M純數(shù)字太難了, 而字母加數(shù)字才是人類(lèi)習(xí)慣的方式,為了解決這個(gè)問(wèn)題, DNS服務(wù)營(yíng)運(yùn)而生.
2. HTTP的缺點(diǎn)
- 通信使用明文(不加密), 內(nèi)容可能會(huì)被竊聽(tīng)
- 不驗(yàn)證通信方的身份, 因此有可能遭遇偽裝
- 無(wú)法證明報(bào)文的完整性, 所有有可能已遭篡改
3.HTTP+加密+認(rèn)證+完整性保護(hù) = HTTPS
HTTPS并非是應(yīng)用層的一種新協(xié)議. 只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS (Transport Layer Security) 協(xié)議替代而已.
通常, HTTP直接和TCP通信, 當(dāng)使用SSL時(shí), 演變成了先和SSL通信, 再由SSL和TCP通信了, 簡(jiǎn)而言之, 所謂HTTPS, 其實(shí)就是身披SSL協(xié)議的這層外殼的HTTP.
在采用SSL后, HTTP就擁有了HTTPS的加密, 證書(shū)和完整性的保護(hù)這些功能.
SSL是獨(dú)立于HTTP的協(xié)議, 所有不光是HTTP協(xié)議, 其他運(yùn)行在應(yīng)用層的SMTP(郵件協(xié)議)和Telnet等協(xié)議均可配合SSL協(xié)議使用. 可以說(shuō)SSL是當(dāng)今世界上應(yīng)用最廣泛的網(wǎng)絡(luò)安全技術(shù).
4.SSL是如何加密的
SSL采用一種叫做公開(kāi)密鑰加密(Public-key cryptography)的加密方式.
近代的加密方法中, 加密算法是公開(kāi)的, 而秘鑰是保密的, 通過(guò)這種方式得以保持加密方法的安全性.
共享密鑰加密
的困境
加密和解密同用一個(gè)密鑰的方式稱(chēng)為共享密鑰加密, 也被叫做對(duì)稱(chēng)密鑰加密.
共享加密方式加密時(shí)必須將密鑰也發(fā)給對(duì)方. 在互聯(lián)網(wǎng)上轉(zhuǎn)發(fā)密鑰時(shí), 如果通信被監(jiān)聽(tīng)那么密鑰就會(huì)落入攻擊者之手, 同事也就失去了加密的意義,
怎么才能安全的轉(zhuǎn)交?
使用兩把密鑰的公開(kāi)密鑰加密
公開(kāi)
密鑰加密方式很好地解決了共享
密鑰加密的困難
公開(kāi)密鑰加密使用一對(duì)非對(duì)稱(chēng)的密鑰. 一把叫做私有密鑰, 另一把叫做公開(kāi)密鑰
使用公開(kāi)密鑰加密方式, 發(fā)送密文的一方使用對(duì)方的公開(kāi)密鑰進(jìn)行加密處理, 對(duì)方收到被加密的信息后, 在使用自己的私有密鑰進(jìn)行解密. 利用這種方式, 不需要發(fā)送用來(lái)解密的私有密鑰, 也不用擔(dān)心密鑰被攻擊者竊聽(tīng)而盜走.
另外, 要想根據(jù)密文和公開(kāi)密鑰, 恢復(fù)到信息原文是異常困難的, 因?yàn)榻饷苓^(guò)程就是在對(duì)離散對(duì)數(shù)進(jìn)行求值, 這并非輕而易舉就能辦到的. 退一步講, 如果能對(duì)一個(gè)非常大的整數(shù)做到快速地因式分解, 那么密碼還是在存在希望的, 但就目前的技術(shù)來(lái)看是不太現(xiàn)實(shí)的.
HTTPS采用混合加密機(jī)制
HTTPS采用共享秘鑰加密 和 公開(kāi)秘鑰加密兩者并用的混合加密機(jī)制. 若密鑰能夠?qū)崿F(xiàn)安全交換, 那么有可能會(huì)考慮僅適用公開(kāi)密鑰加密來(lái)通信. 但是公開(kāi)密鑰加密和共享密鑰加密相比, 其處理速度要慢.
所以應(yīng)充分利用兩者各自優(yōu)勢(shì), 將多種方法組合起來(lái)用于通信. 在交換密鑰環(huán)節(jié)適用公開(kāi)密鑰加密方式, 之后的建立通信交換報(bào)文階段則使用共享密鑰加密方式.
5.證明公開(kāi)密鑰的正確性的證書(shū)
遺憾的是, 公開(kāi)密鑰加密方式還是存在一些問(wèn)題的, 那就是無(wú)法證明公開(kāi)密鑰本身就是貨真價(jià)實(shí)的公開(kāi)密鑰. 比如, 正準(zhǔn)備和某臺(tái)服務(wù)器建立公開(kāi)密鑰加密方式下的通信時(shí), 如何證明收到的公開(kāi)密鑰就是原本預(yù)想的那臺(tái)服務(wù)器發(fā)行的公開(kāi)密鑰. 或許在公開(kāi)密鑰傳輸途中, 真正的公開(kāi)密鑰已經(jīng)被攻擊者替換了.
為了解決上述問(wèn)題, 可以使用有數(shù)字證書(shū)認(rèn)證機(jī)構(gòu)
和其他相關(guān)機(jī)關(guān)頒發(fā)的公開(kāi)密鑰證書(shū)
基本流程為:
- 1.服務(wù)器把自己的公開(kāi)密鑰登錄至數(shù)字證書(shū)認(rèn)證機(jī)構(gòu)
- 2.數(shù)字證書(shū)認(rèn)證機(jī)構(gòu)用自己的私有密鑰向服務(wù)器的公開(kāi)密鑰署數(shù)字簽名并頒發(fā)公鑰證書(shū)
- 3.客戶端拿到服務(wù)器的公鑰證書(shū)后, 使用數(shù)字證書(shū)認(rèn)證機(jī)構(gòu)的公開(kāi)密鑰, 向數(shù)字證書(shū)認(rèn)證機(jī)構(gòu)驗(yàn)證公鑰證書(shū)上的數(shù)字簽名, 以確認(rèn)服務(wù)器的公開(kāi)密鑰的真實(shí)性
- 4.使用服務(wù)器的公開(kāi)密鑰對(duì)報(bào)文加密后發(fā)送
- 5.服務(wù)器用私有密鑰對(duì)報(bào)文解密
6.SSL速度慢嗎?
由于HTTPS還需要做服務(wù)器,客戶端雙方加密及解密處理, 因此會(huì)消耗CPU和內(nèi)存等硬件資源, 和HTTP通信相比, SSL通信部分消耗網(wǎng)絡(luò)資源. 而SSL通信部分, 有因?yàn)橐獙?duì)通信進(jìn)行處理, 所有時(shí)間上又延長(zhǎng)了.
針對(duì)速度慢這樣一個(gè)問(wèn)題, 并沒(méi)有根本性的解決方案, 我們會(huì)使用SSL加速器這種(專(zhuān)用服務(wù)器)硬件來(lái)改善該問(wèn)題. 相對(duì)軟件來(lái)講, 能夠提高數(shù)倍SSL計(jì)算速度.
7.為什么不一直使用HTTPS
既然HTTPS那么的可靠安全, 那為何不所有的Web網(wǎng)站不一直使用HTTPS?
其中的一個(gè)原因是, 因?yàn)榕c純文本通信相比, 加密通信會(huì)消耗更多的CPU資源以及內(nèi)存資源, 如果每次通信都加密, 會(huì)消耗相當(dāng)多的資源, 平攤到一臺(tái)計(jì)算機(jī)上時(shí), 能夠處理的請(qǐng)求數(shù)量必定會(huì)隨之減少.
因此, 如果是非敏感信息則使用HTTP通信, 只有在包括個(gè)人信息等敏感數(shù)據(jù)時(shí), 才利用HTTPS加密通信, 以節(jié)省資源. 除此之外, 想要節(jié)約購(gòu)買(mǎi)證書(shū)的開(kāi)銷(xiāo)也原因之一.
PS: <圖解HTTP>