日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

你了解HTTPS工作原理吗?

發(fā)布時間:2024/4/11 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你了解HTTPS工作原理吗? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

點擊上方“朱小廝的博客”,選擇“設(shè)為星標(biāo)”

后臺回復(fù)"加群",加入新技術(shù)

來源:8rr.co/stqK

當(dāng)你打開瀏覽器,訪問某個網(wǎng)站,如果網(wǎng)址旁有個小鎖,代表訪問的網(wǎng)址是安全的,反之不安全。當(dāng)我們沒有看到那個小鎖的小圖標(biāo)的時候,需要提高警惕,不要隨意輸入個人重要的資料。所有的銀行和支付相關(guān)的網(wǎng)站都是 100% 使用 HTTPS 的。

為什么需要 HTTPS?

我們?yōu)槭裁葱枰?HTTPS?主要有如下三個原因:

①保護隱私(Privacy所有信息都是加密傳播,第三方無法竊聽數(shù)據(jù)。如果使用 HTTP 明文傳輸數(shù)據(jù)的話,很可能被第三方劫持數(shù)據(jù),那么所輸入的密碼或者其他個人資料都被暴露在他人面前,后果可想而知。

②數(shù)據(jù)完整性(Integraty):一旦第三方篡改了數(shù)據(jù),接收方會知道數(shù)據(jù)經(jīng)過了篡改,這樣便保證了數(shù)據(jù)在傳輸過程中不被篡改——數(shù)據(jù)的完整性。

③身份認證(Identification):第三方不可能冒充身份參與通信,因為服務(wù)器配備了由證書頒發(fā)機構(gòu)(Certificate Authority,簡稱 CA)頒發(fā)的安全證書,可以證實服務(wù)器的身份信息,防止第三方冒充身份。

也有少數(shù)情況下,通信需要客戶端提供證書,例如銀行系統(tǒng),需要用戶在登錄的時候,插入銀行提供給用戶的 USB,就是需要客戶端提供證書,用來驗證客戶的身份信息。

HTTPS 是什么?SSL/TLS 是什么?

HTTP 協(xié)議(HyperText Transfer Protocol,超文本傳輸協(xié)議)是大家最熟悉的一種協(xié)議,它是一個用于傳輸超媒體文檔的協(xié)議,它位于 OSI 網(wǎng)絡(luò)協(xié)議模型的應(yīng)用層。

但是它是明文傳輸協(xié)議,是非常不安全的,容易被人篡改和竊取數(shù)據(jù)。

SSL(Secure Socket Layer)——網(wǎng)景(Netscape)公司設(shè)計的主要用于 Web 的安全傳輸協(xié)議。

它位于 TCP 傳輸層協(xié)議和應(yīng)用層協(xié)議之間。(它沒有被劃分在 OSI 網(wǎng)絡(luò)協(xié)議模型中,且認為它是應(yīng)用層的子層。)

眾所周知,網(wǎng)景公司 20 世紀(jì) 90 年代在和微軟的競爭中最終敗下陣來,之后網(wǎng)景公司將 SSL 協(xié)議的管理權(quán)轉(zhuǎn)交給 IETF(Internet Engineering Task Force, www.ietf.org)。

于是 IETF 將 SSL 作了標(biāo)準(zhǔn)化,重新命名為 TLS(Transport Layer Security)。在 1999 年,TLS 1.0 誕生了(其實也就是 SSL 3.1)。

HTTPS(HyperText Transfer Protocol Secure)是建立在 SSL/TLS 協(xié)議之上,信息通信通過 SSL/TLS 進行加密,最后一個 S 就是 Secure 的縮寫,代表安全的意思,HTTPS = HTTP+SSL/TLS。

SSL/TLS?發(fā)展史

SSL/TLS 發(fā)展史如上圖:

實際上現(xiàn)代的瀏覽器已經(jīng)基本不使用 SSL,使用的都是 TLS,SSL 3.0 于 2015 年已經(jīng)壽終正寢,各大瀏覽器也不支持了。

但是由于 SSL 這個術(shù)語存在的時間太長,很多地方還是廣泛的使用它,但是要清楚其實它說的是 TLS。

有調(diào)查顯示現(xiàn)在絕大部分瀏覽器(>99.5%)都使用 TLS 1.2 或者 TLS 1.3。只有不足 1% 的瀏覽器仍然使用 TLS 1.0 或者 TLS 1.1。

TLS 1.2 仍然是主流協(xié)議(本文寫于 2020 年初),相信將來逐漸 TLS 1.3 將會作為主流協(xié)議。

很多瀏覽器將會開始不支持 TLS 1.0 和 1.1:

  • Google 將在 Chrome 72 中不推薦使用 TLS 1.0 和 1.1,而 Chrome 81 之后將會完全不支持。

  • Mozilla 的 Firefox,微軟的 Edge 和 IE 以及蘋果的 Safari 都會分別于 2020 年逐漸移除對 TLS 1.0 和 1.1 的支持。

那么一些還在使用 TLS 1.0 和 1.1 的網(wǎng)站就得被迫升級到 TLS 1.2 或者 TLS 1.3。

要關(guān)閉瀏覽器對 TLS 1.0 和 1.1 的支持,可以在 Internet 選項中修改:

SSL/TLS?的工作原理

需要理解 SSL/TLS 的工作原理,我們需要掌握加密算法。

加密算法有兩種:

  • 對稱加密

  • 非對稱加密

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

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

公鑰顧名思義是公開的,任何人都可以獲得,而私鑰是私人保管的,相信大多程序員已經(jīng)對這種算法很熟悉了。

我們提交代碼到 Github 的時候,就可以使用 SSH key:在本地生成私鑰和公鑰,私鑰放在本地 .ssh 目錄中,公鑰放在 Github 網(wǎng)站上。

這樣每次提交代碼,不用麻煩的輸入用戶名和密碼了,Github 會根據(jù)網(wǎng)站上存儲的公鑰來識別我們的身份。公鑰負責(zé)加密,私鑰負責(zé)解密;或者,私鑰負責(zé)加密,公鑰負責(zé)解密。

這種加密算法安全性更高,但是計算量相比對稱加密大很多,加密和解密都很慢。

常見的非對稱算法有 RSA。SSL/TLS 是利用了對稱加密和非對稱加密的特點。

先來看下整個 SSL/TLS 的握手過程,之后我們再分步驟詳細解讀,每一步都干了些什么。

當(dāng) TCP 建立連接之后,TLS 握手的第一步由客戶端發(fā)起,發(fā)送 ClientHello 的消息到服務(wù)器。

ClientHello 消息包含:

  • 客戶端支持的 SSL/TLS 版本

  • 客戶端支持的加密套件(Cipher Suites)

  • 會話 Idsession id(如果有的值的話,服務(wù)器端會復(fù)用對應(yīng)的握手信息,避免短時間內(nèi)重復(fù)握手)

  • 隨機數(shù) client-random

延伸閱讀:

加密套件名如:“TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA256”,這么長的名字看著有點暈吧,不用怕,其實它的命名非常規(guī)范,格式很固定。基本的形式是“密鑰交換算法-服務(wù)身份驗證算法-對稱加密算法-握手校驗算法”。


握手過程中,證書簽名使用的 RSA 算法,如果證書驗證正確,再使用 ECDHE 算法進行密鑰交換,握手后的通信使用的是 AES256 的對稱算法分組模式是 GCM。

驗證證書簽名合法性使用 SHA256 作哈希算法檢驗。相關(guān)的算法的用處將在后文中詳解。

然后服務(wù)器端在收到這個 ClientHello,從中選擇服務(wù)器支持的版本和套件,發(fā)送 ServerHello 消息:

  • 服務(wù)器所能支持的最高 SSL/TLS 版本

  • 服務(wù)器選擇的加密套件

  • 隨機數(shù) server-random

  • 會話 Idsession id(用于下次復(fù)用當(dāng)前握手的信息,避免短時間內(nèi)重復(fù)握手。)

隨后服務(wù)器發(fā)送服務(wù)器的安全證書(含公鑰)。如果需要客戶端也提供證書的話,還會發(fā)出客戶端證書請求(Client Certificate Request),只有少數(shù)金融機構(gòu)才需要客戶端也提供客戶端證書。

此后客戶端發(fā)送 Server Hello Done 消息表示 Hello 階段完成。

客戶端收到 ServerHello 后,會對收到的證書進行驗證。

我們來看一下為什么可以通過 CA(Certificate Authority,證書頒發(fā)機構(gòu))簽發(fā)的證書來確認網(wǎng)站的身份?

當(dāng)我們安裝操作系統(tǒng)或者瀏覽器的時候,會安裝一組可信任的 CA(根證書 CA 包括 GlobalSign、GeoTrust、Verisign 等)列表。

根 CA 如 GlobalSign 就在我們的可信任的 CA 列表里,你的瀏覽器或者操作系統(tǒng)含有 GlobalSign 的公鑰。

先來看一下 Google 的證書,當(dāng)你訪問 Google 的時候,Google 會發(fā)給你它的證書。證書中包含頒發(fā)機構(gòu)的簽名以及服務(wù)器的公鑰。

瀏覽器首先用哈希函數(shù)對明文信息的摘要做哈希得到一個哈希值(用到的就是證書中的簽名哈希算法 SHA256),然后用根 CA 的公鑰對根證書的簽名作解密得到另一個哈希值(用到的算法就是 RSA 非對稱算法)。

如果兩個哈希值相等則說明證書沒有被篡改過。當(dāng)然還需校驗證書中服務(wù)器名稱是否合法以及驗證證書是否過期。

這樣就免受中間人攻擊了,因為假如有中間人修改了證書的內(nèi)容(如將證書中的公鑰替換成自己的公鑰),那么將獲得不同的哈希值,從而兩個哈希值不匹配導(dǎo)致驗證失敗。

如果要繞過這個機制,中間人必須要也替換簽名,使簽名也相匹配。而做到這一點就需要破解到了根證書的密鑰(而這是不可能的,中間人必然會失敗)。

瀏覽器會出現(xiàn)以下畫面,告訴你正在遭受中間人攻擊,因為證書被篡改了:

那聰明的你肯定也想到了,如果你開發(fā)了一個系統(tǒng)還在測試階段,還沒有正式申請一張證書,那么你可以為服務(wù)器自簽名一張證書,然后將證書導(dǎo)入客戶端的 CA 信任列表中。

信任鏈機制如下圖:

可以看到證書路徑是:?

  • GlobalSign Root CA-R2→GTS CA 1O1→*.google.com

因為我們的瀏覽器信任 GlobalSign Root CA,根據(jù)信任鏈機制,你相信了根 CA 頒發(fā)的證書,也要相信它簽名的子 CA 頒發(fā)的證書,也要相信子 CA 簽名的子子 CA 的證書。

而我們通過一級級的校驗,如果從根證書到最下層的證書都沒有被篡改過,我們就相信最下層的這個服務(wù)器證書是合法的。所以在這個機制中,你就需要無條件的相信根證書的頒發(fā)機構(gòu)。

如果通過驗證,客戶端生成一個隨機數(shù) pre-master,用于密鑰交換過程。

密鑰交換過程:客戶端用第三步中服務(wù)器的證書中拿到服務(wù)器的公鑰,用這個公鑰加密(算法是加密套件中的密鑰交換算法,譬如 ECDHE 算法)生成密文發(fā)送給服務(wù)器。

客戶端用 server-random+client-random+pre-master 一起計算出對稱密鑰 master secret。

服務(wù)器收到第四步的信息之后,用服務(wù)器的私鑰對密文進行解密得到密鑰 pre-master。

因為只有服務(wù)器有私鑰,可以針對客戶端發(fā)出的加密過的信息進行解密得到 pre-master,這樣就保證了只有服務(wù)器和客戶端知道 pre-master。

服務(wù)器端也可以用 server-random+client-random+pre-master 一起計算出對稱密鑰 master secret。

現(xiàn)在客戶端和服務(wù)器均有密鑰 master secret 了,后面就可以用它來進行加密和解密了。

為什么不能只用一個 pre-master 作為之后加密的對稱密鑰?

雖然只有服務(wù)器有私鑰,能夠解密 pre-master 呀,但僅用它作為 master secret 是不夠安全的,這是因為要以防客戶端的 pre-master 并不是隨機數(shù)的情況。

加上另外兩個隨機數(shù) client-random 以及 server-random(而這兩個隨機數(shù)和時間有相關(guān)性),這樣就能保證最后生成的 master secret 一定是隨機數(shù)。

客戶端用 master secret 加密了一條握手完成的消息發(fā)送給服務(wù)器。

服務(wù)器端也回發(fā)了一條用 master secret 加密的握手完成的消息。

當(dāng)兩方都收到對方發(fā)送的握手消息之后,也成功解密后,就可以用 master secret 愉快的開始數(shù)據(jù)加密和解密了。

綜上,整個握手過程主要是通過一系列步驟通過非對稱加密的算法交換得到了 master secret,這個步驟通常需要幾百毫秒,但是就是這一頓猛操作之后使得只有服務(wù)器和客戶端知道 master secret。

之后的通信又利用了高效的對稱算法對所有信息進行加密和解密,雖然加密和解密也需要耗時耗流量,不過信息是完全不可能被別人篡改和破解的,這一點損耗還是值得的。

想知道更多?描下面的二維碼關(guān)注我

后臺回復(fù)”加群“獲取公眾號專屬群聊入口

【原創(chuàng)系列 | 精彩推薦】

  • Paxos、Raft不是一致性算法嘛?

  • 越說越迷糊的CAP

  • 分布式事務(wù)科普——初識篇

  • 分布式事務(wù)科普——終結(jié)篇

  • 面試官居然問我Raft為什么會叫做Raft!

  • 面試官給我挖坑:URI中的//有什么用

  • 面試官給我挖坑:a[i][j]和a[j][i]有什么區(qū)別?

  • 面試官給我挖坑:單機并發(fā)TCP連接數(shù)到底有多少?

  • 網(wǎng)關(guān)Zuul科普

  • 網(wǎng)關(guān)Spring Cloud?Gateway科普

  • Nginx架構(gòu)原理科普

  • OpenResty概要及原理科普

  • 微服務(wù)網(wǎng)關(guān) Kong 科普

  • 云原生網(wǎng)關(guān)Traefik科普

朕已閱?

總結(jié)

以上是生活随笔為你收集整理的你了解HTTPS工作原理吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。