<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          [WEB]深入淺出HTTPS協(xié)議

          共 5104字,需瀏覽 11分鐘

           ·

          2020-02-13 11:24

          背景

          被同事分派要分享一篇技術(shù)文章,首先這是個好事兒 :),我是極力支持,也希望大家多踴躍輸出共同學(xué)習(xí)提高。

          關(guān)于選擇這個主題,第一個原因:唯醫(yī)的站點全都切換為HTTPS協(xié)議。第二個原因,主流站點及第三方的接口交互等基本都在采用HTTPS、或在采用HTTPS的路上。(你可以帶著問題,例如:為什么主流網(wǎng)站要用。當(dāng)然如果沒有答案,可以留言)

          關(guān)于技術(shù)文章,身為一個技術(shù)從業(yè)者,向來感覺枯燥、頭大。尤其術(shù)語、縮寫較多或是牽出很多上下文,如果沒有一個簡短通俗的解釋,就會像拉線頭似的,又拉出許多知識點。越讀越亂,只得全部梳理下來才能整明白怎么回事。鑒于大家都不喜歡這樣的文章,我會盡最大~~~~~可能用最~~~通俗、通俗 、通俗的話和圖,讓看的人都能整明白,畢竟是一篇技術(shù)文章,考慮受眾,我會分為兩個版本,大話版(簡單了解)、進階版(深入了解)。只要是HTTPS逃不過的范疇,我都會介紹,反之,我都會忽略(意味著你也可以忽略,并不影響閱讀理解HTTPS),盡可能的減少不相干的概念,當(dāng)然如果你認為還是需要在某個擴展點深入,那就不在本節(jié)的范疇了,我只想做到HTTPS知識點中的東西,通過這一篇你就整明白了,當(dāng)然我不保證我說的對(歡迎大家指正) - -!,好了,我猜想我上面的廢話大家看起來并不吃力,讓我們開始HTTPS旅程吧~。

          目錄


          我想讓讀的人都能整明白,計劃從以下幾個方面進行重點闡述:

          一、HTTPS是什么

          • SSL協(xié)議是什么
          • 加密算法
          • 證書簽名

          二、HTTPS的優(yōu)缺點

          三、為什么要用HTTPS

          四、如何合法充當(dāng)中間人(無大話版)

          五、怎么應(yīng)用HTTPS(無大話版)


          內(nèi)容




          一、HTTPS是什么?


          • 大話:
          • HTTP(全稱:?Hyper Text Transfer Protocol),叫超文本傳輸協(xié)議,這是什么?忽略它,對,我就這么告訴你。可以把它理解為瀏覽器向服務(wù)器通訊的管道。

          • 別和我說HTTP,嗯,我和你說HTTPS,就是多了個S。這個S是SSL(全稱:?Secure Sockets Layer)又叫安全套接層。層?我們不聊這個,我們說安全,安全就是加了密碼了,不讓你知道我銀行卡密碼,就是這樣。

          • ?小結(jié):
          • HTTPS 就是瀏覽器內(nèi)的信息加個密,有密碼的與服務(wù)器進行通訊,總之很安全?是的,恭喜你,你知道了HTTPS是什么。

          • 進階:
          • 我們知道HTTP是無狀態(tài)的,端口為80。無狀態(tài)是什么?好,同樣是忽略它。HTTPS是由SSL+HTTP協(xié)議構(gòu)建的的加密傳輸、身份認證的網(wǎng)絡(luò)協(xié)議,端口號:443。


          ????????1.?SSL協(xié)議是什么


          ????????SSL位于TCP/IP協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持,怎么提供?讓我們來刨~~~~,SSL協(xié)議有三個特性:機密性、可靠性、完整性。?就是SSL協(xié)議使用密鑰加密通信數(shù)據(jù)。服務(wù)器和客戶都會被認證,客戶的認證是可選的。SSL協(xié)議會對傳送的數(shù)據(jù)進行完整性檢查。有這三個特性來保證數(shù)據(jù)通訊的安全支持。


          ????????SSL協(xié)議可分為兩層:SSL記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持。另一個是SSL握手協(xié)議(SSL Handshake Protocol):它建立在SSL記錄協(xié)議之上,用于在實際的數(shù)據(jù)傳輸開始前,通訊雙方進行身份認證、協(xié)商加密算法、交換加密密鑰等。什么,你和我談加密算法?容我慢慢解釋。


          ????????2.加密算法


          ????????這個HTTPS老聽說它安全(安全就是和密碼掛勾),所以得提及一下加密算法。加密通常分為兩類:對稱與非對稱。對稱理解就是兩個相同的,反之就是非對稱了。- -!嗯,因為對稱使用的是一把鑰匙,很相同是吧,一起用。而非對稱確將鑰匙分為兩把美名曰:公、私鑰。存在即是合理,下面我們各抓一個主流典型來描述。


          ????????對稱算法里,目前主流代表AES(?全稱:?Advanced Encryption Standard)。優(yōu)點:算法公開,計算量小,加密速度快,加密效率高。缺點:鑰匙會在網(wǎng)絡(luò)中傳輸,安全性低。


          ????????非對稱算法算法里,目前主流代表RSA(全稱:?Rivest-Shamir-Adlemand)仨人名。優(yōu)點:剛說兩把鑰匙,叫公鑰的隨便在網(wǎng)上傳,私鑰收起來,不會在網(wǎng)絡(luò)中傳輸,安全性高。缺點:加解密速度慢。同樣也是目前唯一既能用于密鑰交換也能用于證書簽名的算法。好了,加密算法介紹完成。等等,證書簽名是什么?


          ????????3.證書簽名


          ????????為什么又提這東西?這東西有什么用?我會在為什么HTTPS安全中介紹。我們先看看證書,在這兒的證書指的是SSL證書,證書長下圖這樣。這東西不白給,你以為會技術(shù),就啥錢都不想花?在公網(wǎng)上流動的是需要受信任的第三方,也就是CA(全稱:?Certificate Authority)證書授權(quán)機構(gòu)來做這個證書的發(fā)放,與合法性校驗??梢灾魂P(guān)注三個信息點,頒給的是哪兒:*.allinmd.cn,頒發(fā)者是GeoTrust(全球第二大數(shù)字證書頒發(fā)機構(gòu))。第三個有效期決定你的證書在公網(wǎng)上管多長時間。


          640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

          640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1






          二、HTTPS的優(yōu)缺點?


          • 大話:
          • 優(yōu)點:

          ???????看的見的:有一小鎖,寫著"安全",協(xié)議是https也是能看見。

          • ????看不見的:加了密我知道,嗯,就這樣。

          • 640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
          • ???
          • ????????來與HTTP協(xié)議做個比較,來看下面HTTP協(xié)議的,未加小鎖,顯示"不安全",協(xié)議HTTP默認不顯示。

          • 640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

          • 缺點:
          • 看的見的:
          • 唯醫(yī)站點全做了,找不到了。我從其它站點上找了個。來看看下圖,雖然是HTTPS,卻未顯示小鎖,意味著報警,當(dāng)然也不能說缺點,只是里面存在HTTP協(xié)議的內(nèi)容。

          • 看不見的:訪問速度會較HTTP有所延遲,S不白加。

          • 640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1


          • 小結(jié):HTTPS有小鎖,寫著安全。有著你基本可以忽略的延遲。


          • 進階:
          • 優(yōu)點:
          1. HTTP2協(xié)議只支持HTTPS加密連接,H2是建立在HTTPS的SSL層上。
          2. iOS和安卓都要求使用HTTPS加密,2017年所有iOS應(yīng)用必須支持(ATS-App Transport Security),強制使用HTTPS安全連接。而Android P計劃也將全面阻止HTTP請求。
          3. HTTPS加密使網(wǎng)站速度更快,這種情況發(fā)生在一些大公司的內(nèi)部局域網(wǎng),因為通常情況下,網(wǎng)關(guān)會截取并分析所有的網(wǎng)絡(luò)通信,遇到HTTPS時,直接放行,因為無法解讀。
          4. HTTPS加密有利于提升網(wǎng)站搜索排名,搜索引擎認為(百度、谷歌)權(quán)值相同的站點,采用https協(xié)議的頁面更加安全,排名上會有優(yōu)先對待。
          5. HTTPS加密防止中間人流量劫持,小鎖的作用發(fā)揮了。

          • 缺點:
          1. 需所有CDN節(jié)點支持,嗯,不然瀏覽器報警。
          2. 兼容性及周邊,嵌入資源需調(diào)整為HTTPS,同樣道理。

          3. ?
          4. ??c.?多次握手,網(wǎng)絡(luò)耗時變長,帶S了嘛??梢钥吹剑琓LS建立加了11ms時長。螞蟻小,也是肉?


          5. 640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

          6. 等等,不是說SSL嗎,怎么又出來TLS?

          7. 補充說明:
          8. 在1999年,SSL因為應(yīng)該廣泛,已經(jīng)成為互聯(lián)網(wǎng)上的事實標(biāo)準(zhǔn)。IETF(全稱:?The Internet Engineering Task Force)?國際互聯(lián)網(wǎng)工程任務(wù)組。就在這年把SSL標(biāo)準(zhǔn)化。標(biāo)準(zhǔn)化之后的名稱改為TLS(全稱:Transport Layer Security),叫做傳輸層安全協(xié)議,所以理解為和SSL是一個事兒,通常情況會見SSL/TLS寫法。





          三、為什么要用HTTPS?


          • 大話:

          • 看上面說的因為它多了S,加了密了。這樣,別人就偷不了我的信息。是的,就是這樣,就像《潛伏》中,你和我各有一個密碼本。然后,互相公布一段信息,用密碼本對著就可以進行破譯,了解真實想傳達的信息。如果別人截獲了的話,沒有密碼本,也不理解是什么意思。而HTTP沒有密碼本這個東東,所以需要明文傳送,這樣別人截獲了的話,就了解了這段信息的內(nèi)容(包括帳號、密碼、私密信息)等。聽起來,是不是感覺以前像在裸奔?為了將正確的信息傳達給正確的人,所以我們決定采用HTTPS。



          • 進階:

          • 640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

          ????????這就是安全,當(dāng)如果有人嘗試截獲,就會報警??瓷先ズ冒踩珇~~。


          ????????我看明白了,用HTTPS就是用它的安全,是的,就是這樣。那為什么安全。讓我們來詳細拆解下。

          ????

          ????????正常HTTP請求,是由客戶端發(fā)起,向服務(wù)器端傳遞信息。而服務(wù)器端也通過客戶端的具體請求,返還給客戶端所需要的信息。純純的~~你單純的就像HTTP,是的,因為HTTP是無狀態(tài)的,它根本不關(guān)注是誰或去哪兒。就是單純的應(yīng)答機,我不能說這不好,只能怪社會太復(fù)雜。



          640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

          ??????????HTTP的意圖,是最直接的,好,我加個中間人。

          640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

          ???????好吧,HTTPS有什么不一樣的?

          ?????????

          640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1


          ????????

          ????????全程數(shù)據(jù)都是在加密的過程中進行的,看上去好厲害。

          ????

          ????????你說HTTP不安全,是指加中間人來攔截,那HTTPS,同樣可以仿照中間人來攔截,模擬公私鑰的和進行密鑰傳輸。你說的沒錯!是時候請出證書了。

          640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

          ???????

          ????????再看這個圖,是不是有點像國家單位或NB企業(yè)。由它來做第三方,總之就是我們都信它,這樣的話,我們再看來中間人還能好使嗎?中間人當(dāng)然也可以偽造證書,但你偽造的證書不能通過CA。這時客戶端/服務(wù)端就會知道通信被劫持了,會話終止。中間人根本碰不到數(shù)據(jù)。這就是證書的威力。這也就是我們要用它原因。



          • 總結(jié):
          • 非對稱算法(公、私鑰)+數(shù)字證書(驗證身份,驗證公鑰是否偽造)+對稱算法(將數(shù)據(jù)用密鑰加密進行傳輸)=安全。




          四、如何合法充當(dāng)中間人


          現(xiàn)在的情況是,我們是合法的人,想要抓取一些數(shù)據(jù)供自己分析。這時我們就可以采取Fiddler/Charles等第三方協(xié)議工具。其實就是用它們充當(dāng)中間人(可疑:上面說安全,中間人也不行,現(xiàn)在又要說充當(dāng)中間人,容我慢慢解釋)。好,我們看下,充當(dāng)后,客戶端發(fā)生什么?


          640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1


          ?這時我們看到遠端地址變?yōu)楸緳C地址及8888端口代理。


          ?那充當(dāng)中間人的原理是什么呢?


          中間人就是對客戶端說我是服務(wù)端,對服務(wù)端說我是客戶端。


          HTTPS的關(guān)鍵是證書,我們先看下代理后的證書長什么樣?以大家熟知的Charles舉例??吹搅祟C發(fā)者是Charles Proxy CA。


          640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1


          整個步驟是這樣的:


          640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

          ??如下圖就是需要信任中間人證書,在添加例外中操作。


          640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1


          所以基于以上這個后加的步驟,前提是客戶端信任并安裝協(xié)議代理中間人的證書,不然沒戲。這樣是不是就可以解釋HTTPS很安全,可以防止中間人,又可以合法的充當(dāng)中間人了?




          五、怎么應(yīng)用HTTPS?


          先解釋下,我們會將證書配在Nginx上。什么,你不是說服務(wù)器嗎?你不是說去CA頒布給服務(wù)器嗎?是的,是這樣的,服務(wù)器與CA交互這個階段,事實就是將公鑰放在數(shù)字證書中,實際上,我們沒必要每一次連接都去做一次這事兒,你說呢?所以我們可以精簡這一步驟,將數(shù)字證書提前放在服務(wù)器上。然后,我就放在服務(wù)器上單臺還好說,如果是多臺 、集群,那是不是要每臺都放,會不會覺得同步證書或是證書管理都不方便?所以我們只要讓Nginx做反向代理,就可以只做這一把就O了,后續(xù)管理證書也很方便,對吧?


          明白了為什么放在Nginx上,那就直接上代碼,看寫些什么。以唯醫(yī)為例:


          640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1


          我們已知HTTPS是 443端口,所以寫監(jiān)聽這個端口號。

          ??

           1?ssl?on?開啟ssl
           2
           3?ssl_certificate?是證書位置
           4
           5?ssl_certificate_key?是私鑰位置
           6
           7?ssl_protocols?命名用的協(xié)議,我們解釋過TLS
           8
           9?ssl_ciphers?配置加密套件,密碼加密方式
          10
          11?ssl_prefer_server_ciphers?依賴SSLv3和TLSv1協(xié)議的服務(wù)器密碼將優(yōu)先于客戶端密碼
          


          到此,HTTPS就講解分析完成,歡迎大家留言補充沒有講到的或是校正不對的。


          瀏覽 102
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青草原在线视频网站 | 影音先锋av中文字幕 | 九九热这里只有精品国产的 | 欧美性爱 在线 | 免费视频A∨ |