https 是否真的安全,https攻擊該如何防護(hù),https可以被抓包嗎?如何
首先解釋一下什么是HTPPS
簡單來說, https 是 http + ssl,對 http 通信內(nèi)容進(jìn)行加密,是HTTP的安全版,是使用TLS/SSL加密的HTTP協(xié)議 Https的作用: 1.?內(nèi)容加密 建立一個(gè)信息安全通道,來保證數(shù)據(jù)傳輸?shù)陌踩?2.?身份認(rèn)證 確認(rèn)網(wǎng)站的真實(shí)性 3.?數(shù)據(jù)完整性 防止內(nèi)容被第三方冒充或者篡改
其次什么事SSL證書
SSL 由 Netscape 公司于1994年創(chuàng)建,它旨在通過Web創(chuàng)建安全的Internet通信。它是一種標(biāo)準(zhǔn)協(xié)議,用于加密瀏覽器和服務(wù)器之間的通信。它允許通過Internet安全輕松地傳輸賬號密碼、銀行卡、手機(jī)號等私密信息。 SSL證書就是遵守SSL協(xié)議,由受信任的CA機(jī)構(gòu)頒發(fā)的數(shù)字證書。 SSL/TLS的工作原理: 需要理解SSL/TLS的工作原理,我們需要掌握加密算法。加密算法有兩種:對稱加密和非對稱加密:
對稱加密
:通信雙方使用相同的密鑰進(jìn)行加密。特點(diǎn)是加密速度快,但是缺點(diǎn)是需要保護(hù)好密鑰,如果密鑰泄露的話,那么加密就會(huì)被別人破解。常見的對稱加密有AES,DES算法。
非對稱加密
:它需要生成兩個(gè)密鑰:公鑰(Public Key)和私鑰(Private Key)。 公鑰顧名思義是公開的,任何人都可以獲得,而私鑰是私人保管的。相信大多程序員已經(jīng)對這種算法很熟悉了:我們提交代碼到github的時(shí)候,就可以使用SSH key:在本地生成私鑰和公鑰,私鑰放在本地.ssh目錄中,公鑰放在github網(wǎng)站上,這樣每次提交代碼,不用麻煩的輸入用戶名和密碼了,github會(huì)根據(jù)網(wǎng)站上存儲(chǔ)的公鑰來識別我們的身份。 公鑰負(fù)責(zé)加密,私鑰負(fù)責(zé)解密;或者,私鑰負(fù)責(zé)加密,公鑰負(fù)責(zé)解密。這種加密算法安全性更高,但是計(jì)算量相比對稱加密大很多,加密和解密都很慢。常見的非對稱算法有RSA。
細(xì)說一下HTPPS鏈接過程
https 的連接過程大概分為兩個(gè)階段,證書驗(yàn)證階段和數(shù)據(jù)傳輸階段
證書驗(yàn)證階段
大概分為三個(gè)步驟 1.?瀏覽器發(fā)起請求 2.?服務(wù)器接收到請求之后,會(huì)返回證書,包括公鑰 3.?瀏覽器接收到證書之后,會(huì)檢驗(yàn)證書是否合法,不合法的話,會(huì)彈出告警提示(怎樣驗(yàn)證合法,下文會(huì)詳細(xì)解析,這里先忽略)
數(shù)據(jù)傳輸階段
證書驗(yàn)證合法之后 1.?瀏覽器會(huì)生成一個(gè)隨機(jī)數(shù), 2.?使用公鑰進(jìn)行加密,發(fā)送給服務(wù)端 3.?服務(wù)器收到瀏覽器發(fā)來的值,使用私鑰進(jìn)行解密 4.?解析成功之后,使用對稱加密算法進(jìn)行加密,傳輸給客戶端 之后雙方通信就使用第一步生成的隨機(jī)數(shù)進(jìn)行加密通信。
https 的加密方式是怎樣的,對稱加密和非對稱加密,為什么要這樣設(shè)計(jì)
從上面我們可以知道,https 加密是采用對稱加密和非對稱機(jī)密一起結(jié)合的。 在證書驗(yàn)證階段,使用非對稱加密。 在數(shù)據(jù)傳輸階段,使用對稱機(jī)密。 這樣設(shè)計(jì)有一個(gè)好處,能最大程度得兼顧安全效率。 在證書驗(yàn)證階段,使用非對稱加密,需要公鑰和私鑰,假如瀏覽器的公鑰泄漏了,我們還是能夠確保隨機(jī)數(shù)的安全,因?yàn)榧用艿臄?shù)據(jù)只有用私鑰才能解密。這樣能最大程度確保隨機(jī)數(shù)的安全。 在內(nèi)容傳輸階段,使用對稱機(jī)密,可以大大提高加解密的效率。
內(nèi)容傳輸為什么要使用對稱機(jī)密
1.?對稱加密效率比較高 2.?一對公私鑰只能實(shí)現(xiàn)單向的加解密。只有服務(wù)端保存了私鑰。如果使用非對稱機(jī)密,相當(dāng)于客戶端必須有自己的私鑰,這樣設(shè)計(jì)的話,每個(gè)客戶端都有自己的私鑰,這很明顯是不合理的,因?yàn)樗借€是需要申請的。
HTTPS?可以做到百分之一百的安全嘛?
不是百分之白的,可以通過中間人攻擊。
什么是中間人攻擊
中間人攻擊是指攻擊者與通訊的兩端分別創(chuàng)建獨(dú)立的聯(lián)系,并交換其所收到的數(shù)據(jù),使通訊的兩端認(rèn)為他們正在通過一個(gè)私密的連接與對方直接對話,但事實(shí)上整個(gè)會(huì)話都被攻擊者完全控制。 HTTPS 使用了 SSL 加密協(xié)議,是一種非常安全的機(jī)制,目前并沒有方法直接對這個(gè)協(xié)議進(jìn)行攻擊,一般都是在建立 SSL 連接時(shí),攔截客戶端的請求,利用中間人獲取到 CA證書、非對稱加密的公鑰、對稱加密的密鑰;有了這些條件,就可以對請求和響應(yīng)進(jìn)行攔截和篡改。 過程原理: 1.?本地請求被劫持(如DNS劫持等),所有請求均發(fā)送到中間人的服務(wù)器 2.?中間人服務(wù)器返回中間人自己的證書 3.?客戶端創(chuàng)建隨機(jī)數(shù),通過中間人證書的公鑰對隨機(jī)數(shù)加密后傳送給中間人,然后憑隨機(jī)數(shù)構(gòu)造對稱加密對傳輸內(nèi)容進(jìn)行加密傳輸 4.?中間人因?yàn)閾碛锌蛻舳说碾S機(jī)數(shù),可以通過對稱加密算法進(jìn)行內(nèi)容解密 5.?中間人以客戶端的請求內(nèi)容再向正規(guī)網(wǎng)站發(fā)起請求 6.?因?yàn)橹虚g人與服務(wù)器的通信過程是合法的,正規(guī)網(wǎng)站通過建立的安全通道返回加密后的數(shù)據(jù) 7.?中間人憑借與正規(guī)網(wǎng)站建立的對稱加密算法對內(nèi)容進(jìn)行解密 8.?中間人通過與客戶端建立的對稱加密算法對正規(guī)內(nèi)容返回的數(shù)據(jù)進(jìn)行加密傳輸 9.?客戶端通過與中間人建立的對稱加密算法對返回結(jié)果數(shù)據(jù)進(jìn)行解密 由于缺少對證書的驗(yàn)證,所以客戶端雖然發(fā)起的是 HTTPS 請求,但客戶端完全不知道自己的網(wǎng)絡(luò)已被攔截,傳輸內(nèi)容被中間人全部竊取。
HTTPS?該如何防止中間人攻擊
在https中需要證書,證書的作用是為了防止"中間人攻擊"的。如果有個(gè)中間人M攔截客戶端請求,然后M向客戶端提供自己的公鑰,M再向服務(wù)端請求公鑰,作為"中介者" 這樣客戶端和服務(wù)端都不知道,信息已經(jīng)被攔截獲取了。這時(shí)候就需要證明服務(wù)端的公鑰是正確的. 怎么證明呢? 就需要權(quán)威第三方機(jī)構(gòu)來公正了.這個(gè)第三方機(jī)構(gòu)就是CA. 也就是說CA是專門對公鑰進(jìn)行認(rèn)證,進(jìn)行擔(dān)保的,也就是專門給公鑰做擔(dān)保的擔(dān)保公司。
瀏覽器是如何確保CA證書的合法性?
一、證書包含什么信息? 頒發(fā)機(jī)構(gòu)信息、公鑰、公司信息、域名、有效期、指紋…… 二、證書的合法性依據(jù)是什么? 首先,權(quán)威機(jī)構(gòu)是要有認(rèn)證的,不是隨便一個(gè)機(jī)構(gòu)都有資格頒發(fā)證書,不然也不叫做權(quán)威機(jī)構(gòu)。另外,證書的可信性基于信任制,權(quán)威機(jī)構(gòu)需要對其頒發(fā)的證書進(jìn)行信用背書,只要是權(quán)威機(jī)構(gòu)生成的證書,我們就認(rèn)為是合法的。所以權(quán)威機(jī)構(gòu)會(huì)對申請者的信息進(jìn)行審核,不同等級的權(quán)威機(jī)構(gòu)對審核的要求也不一樣,于是證書也分為免費(fèi)的、便宜的和貴的。 三、瀏覽器如何驗(yàn)證證書的合法性? 瀏覽器發(fā)起HTTPS請求時(shí),服務(wù)器會(huì)返回網(wǎng)站的SSL證書,瀏覽器需要對證書做以下驗(yàn)證: 1.?驗(yàn)證域名、有效期等信息是否正確。證書上都有包含這些信息,比較容易完成驗(yàn)證; 2.?判斷證書來源是否合法。每份簽發(fā)證書都可以根據(jù)驗(yàn)證鏈查找到對應(yīng)的根證書,操作系統(tǒng)、瀏覽器會(huì)在本地存儲(chǔ)權(quán)威機(jī)構(gòu)的根證書,利用本地根證書可以對對應(yīng)機(jī)構(gòu)簽發(fā)證書完成來源驗(yàn)證; 3.?判斷證書是否被篡改。需要與CA服務(wù)器進(jìn)行校驗(yàn); 4.?判斷證書是否已吊銷。通過CRL(Certificate Revocation List 證書注銷列表)和 OCSP(Online Certificate Status Protocol 在線證書狀態(tài)協(xié)議)實(shí)現(xiàn),其中 OCSP 可用于第3步中以減少與CA服務(wù)器的交互,提高驗(yàn)證效率。 以上任意一步都滿足的情況下瀏覽器才認(rèn)為證書是合法的。
https 可以抓包嗎
HTTPS 的數(shù)據(jù)是加密的,常規(guī)下抓包工具代理請求后抓到的包內(nèi)容是加密狀態(tài),無法直接查看。 但是,我們可以通過抓包工具來抓包。它的原理其實(shí)是模擬一個(gè)中間人。 通常 HTTPS 抓包工具的使用方法是會(huì)生成一個(gè)證書,用戶需要手動(dòng)把證書安裝到客戶端中,然后終端發(fā)起的所有請求通過該證書完成與抓包工具的交互,然后抓包工具再轉(zhuǎn)發(fā)請求到服務(wù)器,最后把服務(wù)器返回的結(jié)果在控制臺輸出后再返回給終端,從而完成整個(gè)請求的閉環(huán)。 ?
有人可能會(huì)問了,既然 HTTPS 不能防抓包,那 HTTPS 有什么意義?
HTTPS 可以防止用戶在不知情的情況下通信鏈路被監(jiān)聽,對于主動(dòng)授信的抓包操作是不提供防護(hù)的,因?yàn)檫@個(gè)場景用戶是已經(jīng)對風(fēng)險(xiǎn)知情。要防止被抓包,需要采用應(yīng)用級的安全防護(hù),例如采用私有的對稱加密,同時(shí)做好移動(dòng)端的防反編譯加固,防止本地算法被破解。 ?
如何防止抓包?
對于HTTPS API接口,如何防止抓包呢?既然問題出在證書信任問題上,那么解決方法就是在我們的APP中預(yù)置證書。在TLS/SSL握手時(shí),用預(yù)置在本地的證書中的公鑰校驗(yàn)服務(wù)器的數(shù)字簽名,只有簽名通過才能成功握手。由于數(shù)字簽名是使用私鑰生成的,而私鑰只掌握在我們手上,中間人無法偽造一個(gè)有效的簽名,因此攻擊失敗,無法抓包。 同時(shí),為了防止預(yù)置證書被替換,在證書存儲(chǔ)上,可以將證書進(jìn)行加密后進(jìn)行「嵌入存儲(chǔ)」,如嵌入在圖片中或一段語音中。 ?
以下針對HTTPS攻擊方式可以做一些對應(yīng)的防護(hù)策略
? 1.使用最新的加密協(xié)議和版本:持續(xù)關(guān)注加密協(xié)議的發(fā)展,并使用最新的版本。這可以確保你的通信不被降級攻擊所影響。 ? 2.部署安全的證書管理策略:確保你的證書來自受信任的頒發(fā)機(jī)構(gòu),并定期檢查其有效性。同時(shí),確保你的服務(wù)器配置正確地使用這些證書。 ? 3.使用安全的網(wǎng)絡(luò)架構(gòu):通過使用安全的網(wǎng)絡(luò)架構(gòu),如DMZ和防火墻,你可以限制對服務(wù)器的訪問,從而減少受到攻擊的可能性。 ? 4.客戶端驗(yàn)證:通過在客戶端進(jìn)行驗(yàn)證,確保你正在與預(yù)期的目標(biāo)進(jìn)行通信,而不是中間人。 ? 5.定期更新和打補(bǔ)?。杭皶r(shí)更新你的系統(tǒng)和軟件,并應(yīng)用相關(guān)的安全補(bǔ)丁,以防止已知的漏洞被利用。 ? 6.監(jiān)控和日志記錄:實(shí)施強(qiáng)大的監(jiān)控和日志記錄策略,以便及時(shí)發(fā)現(xiàn)并響應(yīng)任何可疑活動(dòng)。利用這些日志數(shù)據(jù)來分析攻擊的模式和趨勢,以便更好地防御未來的攻擊。 ? 7.定期審計(jì):定期進(jìn)行安全審計(jì),以確保系統(tǒng)的安全性得到驗(yàn)證和維持。這將有助于發(fā)現(xiàn)任何潛在的漏洞或不當(dāng)配置。 ? 8.備份和恢復(fù)策略:制定詳細(xì)的備份和恢復(fù)策略,以防止數(shù)據(jù)丟失或系統(tǒng)故障。這將確保即使在攻擊發(fā)生后,你也能迅速恢復(fù)并繼續(xù)運(yùn)營。 ? 9.深度防御策略:實(shí)施一個(gè)深度防御策略,其中包括多個(gè)層次的安全措施。例如,除了使用HTTPS外,還可以考慮使用IPSec、SSH等其他加密協(xié)議來保護(hù)數(shù)據(jù)的安全性。 ? ?