最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

面試官:Https 是怎樣建立連接的,可以抓包嘛,怎樣防止抓包

2023-02-27 10:34 作者:程序員徐公  | 我要投稿

前言

面試中,網(wǎng)絡(luò)(http, https, tcp, udp), jvm, 類加載機制等這些基礎(chǔ)的知識點是高頻出現(xiàn)的,每個程序員都能說上好多。但不一定說到重點,以及理解背后的原理。

我在面試的過程中也經(jīng)常被問到,于是總結(jié)記錄了下來。千萬不要小瞧這些基礎(chǔ),有時候,你算法,項目經(jīng)驗都過了,但是基礎(chǔ)答得不太好。結(jié)果可能會通過,但這肯定會影響你的評級,這是特別吃虧的。所以,不如花點時間背一下,理解一下背后的原理。

舉一個簡單的例子, https 連接過程是怎樣的,使用了了哪種加密方式,可以抓包嗎,怎樣防止抓包,你是否能夠?qū)Υ鹑缦隆?/p>

廢話不多說,開始進入正文。

背景

我們知道,http 通信存在以下問題:

  • 通信使用明文可能會被竊聽

  • 不驗證通信方的身份可能遭遇偽裝

  • 無法證明報文的完整型,可能已遭篡改

使用 https 可以解決數(shù)據(jù)安全問題,但是你真的理解 https 嗎?

當(dāng)面試官連續(xù)對你發(fā)出靈魂追問的時候,你能對答如流嗎

  1. 什么是 https,為什么需要 https

  2. https 的連接過程

  3. https 的加密方式是怎樣的,對稱加密和非對稱加密,為什么要這樣設(shè)計?內(nèi)容傳輸為什么要使用對稱機密

  4. https 是絕對安全的嗎

  5. https 可以抓包嗎

如果你能對答自如,恭喜你,https 你已經(jīng)掌握得差不多了,足夠應(yīng)付面試了。

什么是 https

簡單來說, https 是 http + ssl,對 http 通信內(nèi)容進行加密,是HTTP的安全版,是使用TLS/SSL加密的HTTP協(xié)議

Https的作用:

  1. 內(nèi)容加密 建立一個信息安全通道,來保證數(shù)據(jù)傳輸?shù)陌踩?/p>

  2. 身份認(rèn)證 確認(rèn)網(wǎng)站的真實性

  3. 數(shù)據(jù)完整性 防止內(nèi)容被第三方冒充或者篡改

什么是SSL

SSL 由 Netscape 公司于1994年創(chuàng)建,它旨在通過Web創(chuàng)建安全的Internet通信。它是一種標(biāo)準(zhǔn)協(xié)議,用于加密瀏覽器和服務(wù)器之間的通信。它允許通過Internet安全輕松地傳輸賬號密碼、銀行卡、手機號等私密信息。

SSL證書就是遵守SSL協(xié)議,由受信任的CA機構(gòu)頒發(fā)的數(shù)字證書。

SSL/TLS的工作原理:

需要理解SSL/TLS的工作原理,我們需要掌握加密算法。加密算法有兩種:對稱加密和非對稱加密:

對稱加密:通信雙方使用相同的密鑰進行加密。特點是加密速度快,但是缺點是需要保護好密鑰,如果密鑰泄露的話,那么加密就會被別人pojie。常見的對稱加密有AES,DES算法。

非對稱加密:它需要生成兩個密鑰:公鑰(Public Key)和私鑰(Private Key)。

公鑰顧名思義是公開的,任何人都可以獲得,而私鑰是私人保管的。相信大多程序員已經(jīng)對這種算法很熟悉了:我們提交代碼到github的時候,就可以使用SSH key:在本地生成私鑰和公鑰,私鑰放在本地.ssh目錄中,公鑰放在github網(wǎng)站上,這樣每次提交代碼,不用麻煩的輸入用戶名和密碼了,github會根據(jù)網(wǎng)站上存儲的公鑰來識別我們的身份。

公鑰負(fù)責(zé)加密,私鑰負(fù)責(zé)解密;或者,私鑰負(fù)責(zé)加密,公鑰負(fù)責(zé)解密。這種加密算法安全性更高,但是計算量相比對稱加密大很多,加密和解密都很慢。常見的非對稱算法有RSA。

https 的連接過程

image.png

https 的連接過程大概分為兩個階段,證書驗證階段和數(shù)據(jù)傳輸階段

證書驗證階段

大概分為三個步驟

  1. 瀏覽器發(fā)起請求

  2. 服務(wù)器接收到請求之后,會返回證書,包括公鑰

  3. 瀏覽器接收到證書之后,會檢驗證書是否合法,不合法的話,會彈出告警提示(怎樣驗證合法,下文會詳細(xì)解析,這里先忽略)

數(shù)據(jù)傳輸階段

證書驗證合法之后

  1. 瀏覽器會生成一個隨機數(shù),

  2. 使用公鑰進行加密,發(fā)送給服務(wù)端

  3. 服務(wù)器收到瀏覽器發(fā)來的值,使用私鑰進行解密

  4. 解析成功之后,使用對稱加密算法進行加密,傳輸給客戶端

之后雙方通信就使用第一步生成的隨機數(shù)進行加密通信。

https 的加密方式是怎樣的,對稱加密和非對稱加密,為什么要這樣設(shè)計

從上面我們可以知道,https 加密是采用對稱加密和非對稱機密一起結(jié)合的。

在證書驗證階段,使用非對稱加密。
在數(shù)據(jù)傳輸階段,使用對稱機密。

這樣設(shè)計有一個好處,能最大程度得兼顧安全效率。

在證書驗證階段,使用非對稱加密,需要公鑰和私鑰,假如瀏覽器的公鑰泄漏了,我們還是能夠確保隨機數(shù)的安全,因為加密的數(shù)據(jù)只有用私鑰才能解密。這樣能最大程度確保隨機數(shù)的安全。

在內(nèi)容傳輸階段,使用對稱機密,可以大大提高加解密的效率。

內(nèi)容傳輸為什么要使用對稱機密

  1. 對稱加密效率比較高

  2. 一對公私鑰只能實現(xiàn)單向的加解密。只有服務(wù)端保存了私鑰。如果使用非對稱機密,相當(dāng)于客戶端必須有自己的私鑰,這樣設(shè)計的話,每個客戶端都有自己的私鑰,這很明顯是不合理的,因為私鑰是需要申請的。

https 是絕對安全的嗎

不是絕對安全的,可以通過中間人攻擊。

什么是中間人攻擊

中間人攻擊是指攻擊者與通訊的兩端分別創(chuàng)建獨立的聯(lián)系,并交換其所收到的數(shù)據(jù),使通訊的兩端認(rèn)為他們正在通過一個私密的連接與對方直接對話,但事實上整個會話都被攻擊者完全控制。

HTTPS 使用了 SSL 加密協(xié)議,是一種非常安全的機制,目前并沒有方法直接對這個協(xié)議進行攻擊,一般都是在建立 SSL 連接時,攔截客戶端的請求,利用中間人獲取到 CA證書、非對稱加密的公鑰、對稱加密的密鑰;有了這些條件,就可以對請求和響應(yīng)進行攔截和篡改。

image.png

過程原理:

  1. 本地請求被劫持(如DNS劫持等),所有請求均發(fā)送到中間人的服務(wù)器

  2. 中間人服務(wù)器返回中間人自己的證書

  3. 客戶端創(chuàng)建隨機數(shù),通過中間人證書的公鑰對隨機數(shù)加密后傳送給中間人,然后憑隨機數(shù)構(gòu)造對稱加密對傳輸內(nèi)容進行加密傳輸

  4. 中間人因為擁有客戶端的隨機數(shù),可以通過對稱加密算法進行內(nèi)容解密

  5. 中間人以客戶端的請求內(nèi)容再向官方網(wǎng)站發(fā)起請求

  6. 因為中間人與服務(wù)器的通信過程是合法的,官方網(wǎng)站通過建立的安全通道返回加密后的數(shù)據(jù)

  7. 中間人憑借與官方網(wǎng)站建立的對稱加密算法對內(nèi)容進行解密

  8. 中間人通過與客戶端建立的對稱加密算法對官方內(nèi)容返回的數(shù)據(jù)進行加密傳輸

  9. 客戶端通過與中間人建立的對稱加密算法對返回結(jié)果數(shù)據(jù)進行解密

由于缺少對證書的驗證,所以客戶端雖然發(fā)起的是 HTTPS 請求,但客戶端完全不知道自己的網(wǎng)絡(luò)已被攔截,傳輸內(nèi)容被中間人全部竊取。

https 是如何防止中間人攻擊的

在https中需要證書,證書的作用是為了防止"中間人攻擊"的。 如果有個中間人M攔截客戶端請求,然后M向客戶端提供自己的公鑰,M再向服務(wù)端請求公鑰,作為"中介者" 這樣客戶端和服務(wù)端都不知道,信息已經(jīng)被攔截獲取了。這時候就需要證明服務(wù)端的公鑰是正確的.

怎么證明呢?

就需要權(quán)威第三方機構(gòu)來公正了.這個第三方機構(gòu)就是CA. 也就是說CA是專門對公鑰進行認(rèn)證,進行擔(dān)保的,也就是專門給公鑰做擔(dān)保的擔(dān)保公司。 全球知名的CA也就100多個,這些CA都是全球都認(rèn)可的,比如VeriSign、GlobalSign等,國內(nèi)知名的CA有WoSign。

上面的內(nèi)容有誤,正確答案如下

https 無法防止中間人攻擊,只有做證書固定ssl-pinning 或者 apk中預(yù)置證書做自簽名驗證可以防中間人攻擊。具體的可以看這一篇文章。

Android中Https請求如何防止中間人攻擊和Charles抓包原理

瀏覽器是如何確保CA證書的合法性?

一、證書包含什么信息?

頒發(fā)機構(gòu)信息、公鑰、公司信息、域名、有效期、指紋……

二、證書的合法性依據(jù)是什么?

首先,權(quán)威機構(gòu)是要有認(rèn)證的,不是隨便一個機構(gòu)都有資格頒發(fā)證書,不然也不叫做權(quán)威機構(gòu)。另外,證書的可信性基于信任制,權(quán)威機構(gòu)需要對其頒發(fā)的證書進行信用背書,只要是權(quán)威機構(gòu)生成的證書,我們就認(rèn)為是合法的。所以權(quán)威機構(gòu)會對申請者的信息進行審核,不同等級的權(quán)威機構(gòu)對審核的要求也不一樣,于是證書也分為免費的、便宜的和貴的。

三、瀏覽器如何驗證證書的合法性?

瀏覽器發(fā)起HTTPS請求時,服務(wù)器會返回網(wǎng)站的SSL證書,瀏覽器需要對證書做以下驗證:

  1. 驗證域名、有效期等信息是否正確。證書上都有包含這些信息,比較容易完成驗證;

  2. 判斷證書來源是否合法。每份簽發(fā)證書都可以根據(jù)驗證鏈查找到對應(yīng)的根證書,操作系統(tǒng)、瀏覽器會在本地存儲權(quán)威機構(gòu)的根證書,利用本地根證書可以對對應(yīng)機構(gòu)簽發(fā)證書完成來源驗證;

  3. 判斷證書是否被篡改。需要與CA服務(wù)器進行校驗;

  4. 判斷證書是否已吊銷。通過CRL(Certificate Revocation List 證書注銷列表)和 OCSP(Online Certificate Status Protocol 在線證書狀態(tài)協(xié)議)實現(xiàn),其中 OCSP 可用于第3步中以減少與CA服務(wù)器的交互,提高驗證效率。

以上任意一步都滿足的情況下瀏覽器才認(rèn)為證書是合法的。

https 可以抓包嗎

HTTPS 的數(shù)據(jù)是加密的,常規(guī)下抓包工具代理請求后抓到的包內(nèi)容是加密狀態(tài),無法直接查看。

但是,我們可以通過抓包工具來抓包。它的原理其實是模擬一個中間人。

通常 HTTPS 抓包工具的使用方法是會生成一個證書,用戶需要手動把證書安裝到客戶端中,然后終端發(fā)起的所有請求通過該證書完成與抓包工具的交互,然后抓包工具再轉(zhuǎn)發(fā)請求到服務(wù)器,最后把服務(wù)器返回的結(jié)果在控制臺輸出后再返回給終端,從而完成整個請求的閉環(huán)。

關(guān)于 httpps 抓包的原理可以看這一篇文章。

Android平臺HTTPS抓包解決方案及問題分析

有人可能會問了,既然 HTTPS 不能防抓包,那 HTTPS 有什么意義?

HTTPS 可以防止用戶在不知情的情況下通信鏈路被監(jiān)聽,對于主動授信的抓包操作是不提供防護的,因為這個場景用戶是已經(jīng)對風(fēng)險知情。要防止被抓包,需要采用應(yīng)用級的安全防護,例如采用私有的對稱加密,同時做好移動端的防反編譯加固,防止本地算法被pojie。

擴展

如何防止抓包?

對于HTTPS API接口,如何防止抓包呢?既然問題出在證書信任問題上,那么解決方法就是在我們的APP中預(yù)置證書。在TLS/SSL握手時,用預(yù)置在本地的證書中的公鑰校驗服務(wù)器的數(shù)字簽名,只有簽名通過才能成功握手。由于數(shù)字簽名是使用私鑰生成的,而私鑰只掌握在我們手上,中間人無法偽造一個有效的簽名,因此攻擊失敗,無法抓包。

同時,為了防止預(yù)置證書被替換,在證書存儲上,可以將證書進行加密后進行「嵌入存儲」,如嵌入在圖片中或一段語音中。這涉及到信息隱寫的領(lǐng)域,這個話題我們有空了詳細(xì)說。

關(guān)于 Android 中Https 請求如何防止中間人攻擊和Charles抓包,可以看一下這一篇文章。

Android中Https請求如何防止中間人攻擊和Charles抓包原理

預(yù)置證書/公鑰更新問題

這樣做雖然解決了抓包問題,但是也帶來了另外一個問題:我們購買的證書都是有有效期的,到期前需要對證書進行更新。主要有兩種方式:

提供預(yù)置證書更新接口。在當(dāng)前證書快過期時,APP請求獲取新的預(yù)置證書,這過渡時期,兩個證書同時有效,直到安全完成證書切換。這種方式有一定的維護成本,且不易測試。
在APP中只預(yù)埋公鑰,這樣只要私鑰不變,即使證書更新也不用更新該公鑰。但是,這樣不太符合周期性更新私鑰的安全審計需求。一個折中的方法是,一次性預(yù)置多個公鑰,只要任意一個公鑰驗證通過即可??紤]到我們的證書一般購買周期是3-5年,那么3個公鑰,可以使用9-15年,同時,我們在此期間還可以發(fā)布新版本廢棄老公鑰,添加新公鑰,這樣可以使公鑰一直更新下去。

小結(jié)

開頭說到的幾個問題,你能對答如流了嗎

  1. 什么是 https,為什么需要 https

  2. https 的連接過程

  3. https 的加密方式是怎樣的,對稱加密和非對稱加密,為什么要這樣設(shè)計?內(nèi)容傳輸為什么要使用對稱機密

  4. https 是絕對安全的嗎

  5. https 可以抓包嗎


面試官:Https 是怎樣建立連接的,可以抓包嘛,怎樣防止抓包的評論 (共 條)

分享到微博請遵守國家法律
祁阳县| 邹城市| 东乌| 九龙坡区| 扎囊县| 民丰县| 泰来县| 佛坪县| 大冶市| 泰顺县| 张家口市| 博乐市| 东安县| 海伦市| 衡阳县| 宁德市| 灵寿县| 芦山县| 尉氏县| 连州市| 卢龙县| 麻栗坡县| 寿宁县| 洛川县| 嘉定区| 舟山市| 五指山市| 巴楚县| 逊克县| 丁青县| 太原市| 灌南县| 沂源县| 凤凰县| 察隅县| 浦城县| 吉林省| 五大连池市| 龙陵县| 梁平县| 嘉祥县|