瀏覽器馍盟、HTTP、SSL台猴、HTTPS執(zhí)行流程

瀏覽器朽合、HTTP俱两、SSL、HTTPS執(zhí)行流程

當(dāng)在瀏覽器中輸入U(xiǎn)RL后曹步,頁(yè)面加載完成的過(guò)程中都發(fā)生了什么事情

1宪彩、解析URL

  • 判斷URL是否是合法的URL,如果URL不合法讲婚,則調(diào)用默認(rèn)的搜索引擎尿孔,直接把輸入的內(nèi)容作為要搜索的內(nèi)容進(jìn)行搜索,如果URL合法筹麸,則繼續(xù)下一步活合。
  • 檢查這些請(qǐng)求是HTTPS還是HTTP,如果是HTTPS的話則使用HTTPS協(xié)議進(jìn)行訪問(wèn)物赶,否則使用HTTP協(xié)議發(fā)送白指。有些情況下,第一個(gè)請(qǐng)求不是HTTPS的酵紫,但是當(dāng)瀏覽器向網(wǎng)站發(fā)出第一個(gè)HTTP請(qǐng)求之后告嘲,網(wǎng)站會(huì)返回瀏覽器一個(gè)響應(yīng),請(qǐng)求瀏覽器使用HTTPS發(fā)送請(qǐng)求奖地。
  • 將URL進(jìn)行字符轉(zhuǎn)換

2橄唬、查找IP地址

  • 先檢查瀏覽器的緩存,看看所要訪問(wèn)的域名是否存在于緩存之中参歹,如果存在仰楚,則直接使用緩存中的IP地址進(jìn)行訪問(wèn),如果不存在犬庇,執(zhí)行下一步
  • 緩存中沒(méi)有找到僧界,則調(diào)用系統(tǒng)的gethostbyname庫(kù)函數(shù),進(jìn)行查詢械筛,gethostbyname函數(shù)會(huì)先檢查域名是否在本地的Hosts文件中捎泻,如果找到直接返回域名對(duì)應(yīng)的IP飒炎,(這也當(dāng)訪問(wèn)不到某網(wǎng)址時(shí)埋哟,修改hosts文件的原因)如果沒(méi)有找到則執(zhí)行下一步
  • 向DNS服務(wù)器發(fā)送一個(gè)域名查詢請(qǐng)求,然后就執(zhí)行DNS查詢過(guò)程郎汪,這個(gè)過(guò)程一般情況下會(huì)返回所要訪問(wèn)域名對(duì)應(yīng)的IP地址赤赊,除非域名真的不存在,或者DNS服務(wù)器出現(xiàn)故障煞赢。

3抛计、建立連接

  • 當(dāng)瀏覽器得到了目標(biāo)服務(wù)器的 IP 地址,以及 URL 中給出來(lái)端口號(hào)(http 協(xié)議默認(rèn)端口號(hào)是 80照筑, https 默認(rèn)端口號(hào)是 443)吹截,它會(huì)調(diào)用系統(tǒng)庫(kù)函數(shù) socket 瘦陈,請(qǐng)求一個(gè) TCP流套接字。進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的傳輸波俄。

  • 連接建立之后晨逝,則根據(jù)HTTP協(xié)議進(jìn)行數(shù)據(jù)交換,資源通常是 HTML 文件懦铺,也可能是 PDF捉貌,圖片,或者其他類型的內(nèi)容冬念。

4趁窃、頁(yè)面渲染

  • 瀏覽器獲得資源文件后,HTML急前,css醒陆,js等文件則根據(jù)自身內(nèi)核的機(jī)制,進(jìn)行頁(yè)面渲染裆针,然后呈現(xiàn)給用戶统求。

參考資料

當(dāng)···時(shí)發(fā)生了什么?
從輸入 URL 到頁(yè)面加載完成的過(guò)程中都發(fā)生了什么事情据块?
在瀏覽器地址欄輸入一個(gè)URL后回車码邻,背后會(huì)進(jìn)行哪些技術(shù)步驟?


SSL

SSL協(xié)議

1另假、背景

  • 背景就不多做介紹了像屋,想要了解的可以查看參考文獻(xiàn)。

2边篮、協(xié)議的執(zhí)行過(guò)程 (握手)

SSL握手過(guò)程可以分為三種:

  • 只驗(yàn)證服務(wù)器的SSL握手過(guò)程
  • 驗(yàn)證服務(wù)器和客戶端的SSL握手過(guò)程
  • 恢復(fù)原有會(huì)話的SSL握手過(guò)程

這三種過(guò)程在文獻(xiàn)一SSL身份認(rèn)證原理中都有所介紹己莺,可以跳轉(zhuǎn)去查看,這里我們以第一種握手過(guò)程著重介紹一下戈轿。

只驗(yàn)證服務(wù)器的SSL握手過(guò)程

借用文獻(xiàn)二圖解SSL/TLS協(xié)議中的一張圖

假定客戶端叫做愛(ài)麗絲凌受,服務(wù)器叫做鮑勃,其驗(yàn)證步驟為:

  • 愛(ài)麗絲(瀏覽器)給出協(xié)議版本號(hào)思杯、一個(gè)客戶端生成的隨機(jī)數(shù)(隨機(jī)數(shù)A)胜蛉,以及客戶端支持的加密方法。
  • 鮑勃(服務(wù)器)確認(rèn)雙方使用的加密方法色乾,并給出數(shù)字證書(shū)誊册、以及一個(gè)服務(wù)器生成的隨機(jī)數(shù)(隨機(jī)數(shù)B)。
  • 愛(ài)麗絲(瀏覽器)確認(rèn)數(shù)字證書(shū)有效暖璧,然后生成一個(gè)新的隨機(jī)數(shù)(隨機(jī)數(shù)C)案怯,并使用數(shù)字證書(shū)中的公鑰,加密這個(gè)隨機(jī)數(shù)澎办,發(fā)給鮑勃(服務(wù)器)嘲碱。
  • 鮑勃(服務(wù)器)使用自己的私鑰金砍,獲取愛(ài)麗絲(瀏覽器)發(fā)來(lái)的隨機(jī)數(shù)(隨機(jī)數(shù)C)
  • 愛(ài)麗絲(瀏覽器)和鮑勃(服務(wù)器)根據(jù)約定的加密方法,使用前面的三個(gè)隨機(jī)數(shù)(A,B,C)麦锯,生成"對(duì)話密鑰"(session key)捞魁,用來(lái)加密接下來(lái)的整個(gè)對(duì)話過(guò)程。

我們可以發(fā)現(xiàn)离咐,在握手的開(kāi)始結(jié)果谱俭,雙方使用的RSA非對(duì)稱加密方式,而握手完成之后宵蛀,兩者的通信則是使用對(duì)稱加密方式昆著。為什么呢,當(dāng)然是為了效率术陶,非對(duì)稱加密安全凑懂,但是所耗資源大;對(duì)稱加密簡(jiǎn)單梧宫,效率比較高接谨。
這樣也許還不夠清晰,下面我們來(lái)抓包看一下:
再盜用一張圖:

  • SSL客戶端通過(guò)Client Hello消息將它支持的SSL版本塘匣、加密算法脓豪、密鑰交換算法、MAC算法等信息發(fā)送給SSL服務(wù)器忌卤。
    如圖:


    SSL版本 TLS 1.2
    Random 隨機(jī)數(shù)A
    Cipher suites 支持的加密算法列表

  • SSL服務(wù)器發(fā)送 Server Hello 消息確定本次通信采用的SSL版本扫夜,,隨機(jī)數(shù)B驰徊,服務(wù)器證書(shū)和加密套件笤闯,如果SSL服務(wù)器允許SSL客戶端在以后的通信中重用本次會(huì)話,則SSL服務(wù)器會(huì)為本次會(huì)話分配會(huì)話ID棍厂,并通過(guò)Server Hello消息發(fā)送給SSL客戶端颗味。抓包顯示此次會(huì)話,占用了三個(gè)數(shù)據(jù)包牺弹。
    如圖:




    Version: TLS 1.2 確認(rèn)使用的協(xié)議版本
    Random 隨機(jī)數(shù)B
    Session ID Length:0 不重用此次會(huì)話浦马,不分配會(huì)話ID
    Cipher Suite 確認(rèn)使用的加密算法
    HandShake Protocol:Certificate 提供服務(wù)器證書(shū)
    HandShake Protocol:Server Key Exchange 發(fā)送服務(wù)器使用的DH參數(shù)
    HandShake Protocol:Server Hello Done server hello結(jié)束

  • SSL客戶端驗(yàn)證SSL服務(wù)器的證書(shū)合法后,利用證書(shū)中的公鑰加密SSL客戶端隨機(jī)生成的隨機(jī)數(shù)C例驹,并通過(guò)Client Key Exchange消息發(fā)送給SSL服務(wù)器捐韩,并發(fā)送Change Cipher Spec消息退唠,通知SSL服務(wù)器后續(xù)報(bào)文將采用協(xié)商好的密鑰和加密套件進(jìn)行加密和MAC計(jì)算
    如圖:


    HandShake Protocol:Client Key Exchange 發(fā)送瀏覽器使用的DH參數(shù)
    HandShake Protocol:Change Cipher Spec 發(fā)送Change Cipher Spec消息鹃锈,通知服務(wù)器開(kāi)始使用加密方式發(fā)送報(bào)文

  • 服務(wù)器端發(fā)送change_cipher_spec和finished消息,通知瀏覽器握手結(jié)束瞧预,使用加密通話
    如圖:

HandShake Protocol:Change Cipher Spec 發(fā)送Change Cipher Spec消息屎债,通知瀏覽器開(kāi)始使用加密方式發(fā)送報(bào)文,結(jié)束握手

參考文獻(xiàn)

SSL身份認(rèn)證原理
圖解SSL/TLS協(xié)議
數(shù)字證書(shū)原理
使用wireshark觀察SSL/TLS握手過(guò)程--雙向認(rèn)證/單向認(rèn)證
OpenSSL 與 SSL 數(shù)字證書(shū)概念貼


證書(shū)

采用HTTPS協(xié)議的服務(wù)器必須要有一套數(shù)字證書(shū)仅政,可以自己制作,也可以向組織申請(qǐng)(CA證書(shū))盆驹。區(qū)別就是自己頒發(fā)的證書(shū)(自建證書(shū))需要客戶端驗(yàn)證通過(guò)圆丹,才可以繼續(xù)訪問(wèn),而使用受信任的公司申請(qǐng)的證書(shū)則不會(huì)彈出提示頁(yè)面躯喇。

CA證書(shū)

CA 機(jī)構(gòu)辫封,又稱為證書(shū)認(rèn)證中心 (Certificate Authority) 中心,是一個(gè)負(fù)責(zé)發(fā)放和管理數(shù)字證書(shū)的第三方權(quán)威機(jī)構(gòu)廉丽,它負(fù)責(zé)管理PKI結(jié)構(gòu)下的所有用戶(包括各種應(yīng)用程序)的證書(shū)倦微,把用戶的公鑰和用戶的其他信息捆綁在一起,在網(wǎng)上驗(yàn)證用戶的身份正压。CA機(jī)構(gòu)的數(shù)字簽名使得攻擊者不能偽造和篡改證書(shū)欣福。

證書(shū)里包含了什么?

一個(gè)標(biāo)準(zhǔn)的X.509數(shù)字證書(shū)包含以下一些內(nèi)容:

  • 證書(shū)的版本信息焦履;
  • 證書(shū)的序列號(hào)拓劝,每個(gè)證書(shū)都有一個(gè)唯一的證書(shū)序列號(hào);
  • 證書(shū)所使用的簽名算法嘉裤;
  • 證書(shū)的發(fā)行機(jī)構(gòu)名稱郑临,命名規(guī)則一般采用X.500格式;
  • 證書(shū)的有效期屑宠,現(xiàn)在通用的證書(shū)一般采用UTC時(shí)間格式牧抵,它的計(jì)時(shí)范圍為1950-2049;
  • 證書(shū)所有人的名稱,命名規(guī)則一般采用X.500格式侨把;
  • 證書(shū)所有人的公開(kāi)密鑰犀变;
  • 證書(shū)發(fā)行者對(duì)證書(shū)的簽名。

當(dāng)我們?cè)L問(wèn)一個(gè)支持HTTPS的網(wǎng)站時(shí)秋柄,其認(rèn)證過(guò)成為:
1获枝、網(wǎng)站運(yùn)行者向向一個(gè)證書(shū)發(fā)布機(jī)構(gòu)"SecureTrust CA"為我們自己的公司"ABC Company"申請(qǐng)了一張證書(shū),注意骇笔,這個(gè)證書(shū)發(fā)布機(jī)構(gòu)"SecureTrust CA"是一個(gè)大家公認(rèn)并被一些權(quán)威機(jī)構(gòu)接受的證書(shū)發(fā)布機(jī)構(gòu)省店,一般情況下,我們的操作系統(tǒng)里面已經(jīng)安裝了"SecureTrust CA"的證書(shū)笨触。
2懦傍、運(yùn)維將證書(shū)部署至網(wǎng)站服務(wù)器
3、客戶端向服務(wù)器發(fā)送通信請(qǐng)求
4芦劣、服務(wù)器將自己申請(qǐng)的證書(shū)發(fā)送給客戶端
5粗俱、客戶端拿到服務(wù)器傳過(guò)來(lái)的證書(shū)后,就開(kāi)始驗(yàn)證證書(shū)有效性的過(guò)程虚吟。

  • 首先應(yīng)用程序(瀏覽器)讀取證書(shū)中的Issuer(發(fā)布機(jī)構(gòu))為"SecureTrust CA" 寸认,然后會(huì)在操作系統(tǒng)中受信任的發(fā)布機(jī)構(gòu)的證書(shū)中去找"SecureTrust CA"的證書(shū)签财,如果找不到,那說(shuō)明證書(shū)的發(fā)布機(jī)構(gòu)是個(gè)水貨發(fā)布機(jī)構(gòu)偏塞,證書(shū)可能有問(wèn)題唱蒸,程序會(huì)給出一個(gè)錯(cuò)誤信息。
  • 如果在系統(tǒng)中找到了"SecureTrust CA"的證書(shū)灸叼,那么應(yīng)用程序就會(huì)從證書(shū)中取出"SecureTrust CA"的公鑰神汹,然后對(duì)我們"ABC Company"公司的證書(shū)里面的指紋和指紋算法用這個(gè)公鑰進(jìn)行解密,
  • 然后使用這個(gè)指紋算法計(jì)算"ABC Company"證書(shū)的指紋古今,將這個(gè)計(jì)算的指紋與放在證書(shū)中的指紋對(duì)比慎冤,如果一致,說(shuō)明"ABC Company"的證書(shū)肯定沒(méi)有被修改過(guò)并且證書(shū)是"SecureTrust CA" 發(fā)布的沧卢,證書(shū)中的公鑰肯定是"ABC Company"的蚁堤。
  • 對(duì)方然后就可以放心的使用這個(gè)公鑰和我們"ABC Company"進(jìn)行通信了。
    以上過(guò)程也就包含了SSL的握手過(guò)程但狭。
  • 之后的通信就使用協(xié)商好的秘鑰進(jìn)行加密通信披诗。
自建證書(shū)

申請(qǐng)CA證書(shū),需要不菲的費(fèi)用立磁,我們也可以自己制作一個(gè)證書(shū)呈队,證書(shū)的內(nèi)容和CA差不多,即自建證書(shū)唱歧。
自建證書(shū)的過(guò)程就不多介紹了宪摧,我們只說(shuō)流程。
使用自建證書(shū)的認(rèn)證過(guò)程與CA證書(shū)的認(rèn)證過(guò)程相比颅崩,自建證書(shū)首先需要把服務(wù)器證書(shū)安裝至客戶端中几于。待客戶端收到服務(wù)器發(fā)送過(guò)來(lái)的證書(shū)信息時(shí),就使用這個(gè)證書(shū)校驗(yàn)服務(wù)的合法性沿后。如果校驗(yàn)成功沿彭,則進(jìn)行下一步,如果失敗尖滚,斷開(kāi)連接喉刘。

此致

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市漆弄,隨后出現(xiàn)的幾起案子睦裳,更是在濱河造成了極大的恐慌,老刑警劉巖撼唾,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件廉邑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鬓催,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門肺素,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)恨锚,“玉大人宇驾,你說(shuō)我怎么就攤上這事『锪妫” “怎么了课舍?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)他挎。 經(jīng)常有香客問(wèn)我筝尾,道長(zhǎng),這世上最難降的妖魔是什么办桨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任筹淫,我火速辦了婚禮,結(jié)果婚禮上呢撞,老公的妹妹穿的比我還像新娘损姜。我一直安慰自己,他們只是感情好殊霞,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布摧阅。 她就那樣靜靜地躺著,像睡著了一般绷蹲。 火紅的嫁衣襯著肌膚如雪棒卷。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天祝钢,我揣著相機(jī)與錄音比规,去河邊找鬼。 笑死拦英,一個(gè)胖子當(dāng)著我的面吹牛苞俘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播龄章,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼吃谣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了做裙?” 一聲冷哼從身側(cè)響起岗憋,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锚贱,沒(méi)想到半個(gè)月后仔戈,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年监徘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晋修。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖棚放,靈堂內(nèi)的尸體忽然破棺而出隙姿,到底是詐尸還是另有隱情,我是刑警寧澤落剪,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站尿庐,受9級(jí)特大地震影響忠怖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抄瑟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一凡泣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧皮假,春花似錦鞋拟、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至布轿,卻和暖如春哮笆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背汰扭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工稠肘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萝毛。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓项阴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親笆包。 傳聞我的和親對(duì)象是個(gè)殘疾皇子环揽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容