<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ## **前言** 近年來,隨著用戶和互聯網企業安全意識的提高和 HTTPS 成本的下降,HTTPS 已經越來越普及。很多互聯網巨頭也在力推 HTTPS,比如谷歌的 Chrome 瀏覽器在訪問 HTTP 網站時會在地址欄顯示不安全的提醒,微信要求所有的小程序必須使用 HTTPS 傳輸協議,蘋果也要求所有在 App Store 上架的應用必須采用 HTTPS ,國內外的大部分主流網站也都已遷移至 HTTPS,可見 HTTPS 全面取代 HTTP 只是時間問題。 <br /> ## **1、HTTP 的最大弊端——不安全** HTTP 之所以被 HTTPS 取代,最大的原因就是不安全,至于為什么不安全,看了下面這張圖就一目了然了。 ![](https://img.kancloud.cn/26/f4/26f4ca3a288079f8147bc16f13c83a04_800x363.png) :-: 圖1. HTTP數據傳輸過程 由圖可見,HTTP 在傳輸數據的過程中,所有的數據都是明文傳輸,自然沒有安全性可言,特別是一些敏感數據,比如用戶密碼和信用卡信息等,一旦被第三方獲取,后果不堪設想。這里可能有人會說,我在前端頁面對敏感數據進行加密不就行了,比如 MD5 加鹽加密。這么想就太簡單了。首先 MD5 并不是加密算法,其全稱是 Message Digest Algorithm MD5,意為信息摘要算法,是一種不可逆的哈希算法,也就是說經過前端 MD5 處理過的數據在服務器端是無法復原的。這里以密碼舉例,前端把用戶密碼通過 MD5 進行處理,并把得到的哈希值發送給服務器,服務器由于無法復原密碼,就會直接用這個哈希值處理用戶請求。所以第三方在獲取這個哈希值后,可以繞過前端登錄頁面直接訪問服務器,造成安全問題。另外,MD5 算法本身的安全性也存在缺陷,這里就不展開談了。 <br /> 總之 MD5,SHA-1 之類的哈希算法并不能讓 HTTP 變得更安全。要想讓 HTTP 更安全,只能使用真正的加密算法,因為加密算法可以用密鑰加密或還原數據,只要確保密鑰不被第三方獲取,那就能確保數據傳輸的安全了。而這正是 HTTPS 的解決方案,那下面就來了解一下加密算法吧。 <br /> ## **2、加密算法** HTTPS 解決數據傳輸安全問題的方案就是使用加密算法,具體來說是混合加密算法,也就是對稱加密和非對稱加密的混合使用,這里有必要先了解一下這兩種加密算法的區別和優缺點。 <br /> ### **2.1 對稱加密** 對稱加密,顧名思義就是加密和解密都是使用同一個密鑰,常見的對稱加密算法有 DES、3DES 和 AES 等,其優缺點如下: * 優點:算法公開、計算量小、加密速度快、加密效率高,適合加密比較大的數據。 * 缺點: 1. 交易雙方需要使用相同的密鑰,也就無法避免密鑰的傳輸,而密鑰在傳輸過程中無法保證不被截獲,因此對稱加密的安全性得不到保證。 2. 每對用戶每次使用對稱加密算法時,都需要使用其他人不知道的惟一密鑰,這會使得發收信雙方所擁有的鑰匙數量急劇增長,[密鑰管理](http://baike.baidu.com/view/297229.htm)成為雙方的負擔。對稱加密算法在分布式網絡系統上使用較為困難,主要是因為密鑰管理困難,使用成本較高。 本文不對具體的加密算法做詳細介紹,有興趣的同學可以參考[對稱加密算法詳解](https://www.cnblogs.com/Terry-Wu/p/10314315.html),如果直接將對稱加密算法用在 HTTP 中,會是下面的效果: ![](https://img.kancloud.cn/dc/81/dc81f3999ded3bda24e56b8df43929e4_800x589.png) :-: 圖2. 對稱加密數據傳輸過程 <br /> 從圖中可以看出,被加密的數據在傳輸過程中是無規則的亂碼,即便被第三方截獲,在沒有密鑰的情況下也無法解密數據,也就保證了數據的安全。但是有一個致命的問題,那就是既然雙方要使用相同的密鑰,那就必然要在傳輸數據之前先由一方把密鑰傳給另一方,那么在此過程中密鑰就很有可能被截獲,這樣一來加密的數據也會被輕松解密。那如何確保密鑰在傳輸過程中的安全呢?這就要用到非對稱加密了。 <br /> ### **2.2 非對稱加密** 非對稱加密,顧名思義,就是加密和解密需要使用兩個不同的密鑰:公鑰(public key)和私鑰(private key)。公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密;如果用私鑰對數據進行加密,那么只有用對應的公鑰才能解密。非對稱加密算法實現機密信息交換的基本過程是:甲方生成一對密鑰并將其中的一把作為公鑰對外公開;得到該公鑰的乙方使用公鑰對機密信息進行加密后再發送給甲方;甲方再用自己保存的私鑰對加密后的信息進行解密。如果對公鑰和私鑰不太理解,可以想象成一把鑰匙和一個鎖頭,只是全世界只有你一個人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個鎖把重要的東西鎖起來,然后發給你,因為只有你一個人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來的東西。常用的非對稱加密算法是 RSA 算法,想詳細了解的同學點這里:[RSA 算法詳解一](http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html)、[RSA 算法詳解二](http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html),其優缺點如下: * 優點:算法公開,加密和解密使用不同的鑰匙,私鑰不需要通過網絡進行傳輸,安全性很高。 * 缺點:計算量比較大,加密和解密速度相比對稱加密慢很多。 由于非對稱加密的強安全性,可以用它完美解決對稱加密的密鑰泄露問題,效果圖如下: ![](https://img.kancloud.cn/20/22/2022d2bb571fd38c26df881a13e6c088_800x547.png) :-: 圖3. 客戶端通過非對稱加密把密鑰 KEY 發送給服務器 <br /> 在上述過程中,客戶端在拿到服務器的公鑰后,會生成一個隨機碼 (用 KEY 表示,這個 KEY 就是后續雙方用于對稱加密的密鑰),然后客戶端使用公鑰把 KEY 加密后再發送給服務器,服務器使用私鑰將其解密,這樣雙方就有了同一個密鑰 KEY,然后雙方再使用 KEY 進行對稱加密交互數據。在非對稱加密傳輸 KEY 的過程中,即便第三方獲取了公鑰和加密后的 KEY,在沒有私鑰的情況下也無法破解 KEY (私鑰存在服務器,泄露風險極小),也就保證了接下來對稱加密的數據安全。而上面這個流程圖正是 HTTPS 的雛形,HTTPS 正好綜合了這兩種加密算法的優點,不僅保證了通信安全,還保證了數據傳輸效率。 <br /> ## **3、HTTPS 原理詳解** HTTPS 并非獨立的通信協議,而是對 HTTP 的擴展,保證了通信安全,二者關系如下: ![](https://img.kancloud.cn/8d/6e/8d6e543620e34af83c432fac7ca2120f_800x523.png) :-: 圖4. HTTP和HTTPS的關系 <br /> 也就是說 HTTPS = HTTP + SSL / TLS。 接下來就是最重要的 HTTPS 原理解析了,老規矩先上圖。 ![](https://img.kancloud.cn/10/83/1083119a709160db24e61a735f81c458_800x669.png) :-: 圖5. HTTPS 加密、解密、驗證及數據傳輸過程 <br /> HTTPS 的整個通信過程可以分為兩大階段:證書驗證和數據傳輸階段,數據傳輸階段又可以分為非對稱加密和對稱加密兩個階段。具體流程按圖中的序號講解。 1. 客戶端請求 HTTPS 網址,然后連接到 server 的 443 端口 (HTTPS 默認端口,類似于 HTTP 的80端口)。 2. 采用 HTTPS 協議的服務器必須要有一套數字 CA (Certification Authority)證書,證書是需要申請的,并由專門的數字證書認證機構(CA)通過非常嚴格的審核之后頒發的電子證書 (當然了是要錢的,安全級別越高價格越貴)。頒發證書的同時會產生一個私鑰和公鑰。私鑰由服務端自己保存,不可泄漏。公鑰則是附帶在證書的信息中,可以公開的。證書本身也附帶一個證書電子簽名,這個簽名用來驗證證書的完整性和真實性,可以防止證書被篡改。 3. 服務器響應客戶端請求,將證書傳遞給客戶端,證書包含公鑰和大量其他信息,比如證書頒發機構信息,公司信息和證書有效期等。Chrome 瀏覽器點擊地址欄的鎖標志再點擊證書就可以看到證書詳細信息。 ![](https://img.kancloud.cn/ea/33/ea33d62c9a77e6eb26677891f4c0d2fe_800x724.png) :-: 圖6. B站 CA 證書 <br /> 4. 客戶端解析證書并對其進行驗證。如果證書不是可信機構頒布,或者證書中的域名與實際域名不一致,或者證書已經過期,就會向訪問者顯示一個警告,由其選擇是否還要繼續通信。就像下面這樣: ![](https://img.kancloud.cn/73/b2/73b295be17462c280e7cc57bde4abedf_800x514.png) :-: 圖7. 瀏覽器安全警告 <br /> 如果證書沒有問題,客戶端就會從服務器證書中取出服務器的公鑰A。然后客戶端還會生成一個隨機碼 KEY,并使用公鑰A將其加密。 5. 客戶端把加密后的隨機碼 KEY 發送給服務器,作為后面對稱加密的密鑰。 6. 服務器在收到隨機碼 KEY 之后會使用私鑰B將其解密。經過以上這些步驟,客戶端和服務器終于建立了安全連接,完美解決了對稱加密的密鑰泄露問題,接下來就可以用對稱加密愉快地進行通信了。 7. 服務器使用密鑰 (隨機碼 KEY)對數據進行對稱加密并發送給客戶端,客戶端使用相同的密鑰 (隨機碼 KEY)解密數據。 8. 雙方使用對稱加密愉快地傳輸所有數據。 <br /> ## **4、總結** 再來總結一下 HTTPS 和 HTTP 的區別以及 HTTPS 的缺點吧: **HTTPS 和 HTTP 的區別:** * 最最重要的區別就是安全性,HTTP 明文傳輸,不對數據進行加密安全性較差。HTTPS (HTTP + SSL / TLS)的數據傳輸過程是加密的,安全性較好。 * 使用 HTTPS 協議需要申請 CA 證書,一般免費證書較少,因而需要一定費用。證書頒發機構如:Symantec、Comodo、DigiCert 和 GlobalSign 等。 * HTTP 頁面響應速度比 HTTPS 快,這個很好理解,由于加了一層安全層,建立連接的過程更復雜,也要交換更多的數據,難免影響速度。 * 由于 HTTPS 是建構在 SSL / TLS 之上的 HTTP 協議,所以,要比 HTTP 更耗費服務器資源。 * HTTPS 和 HTTP 使用的是完全不同的連接方式,用的端口也不一樣,前者是 443,后者是 80。 **HTTPS 的缺點:** * 在相同網絡環境中,HTTPS 相比 HTTP 無論是響應時間還是耗電量都有大幅度上升。 * HTTPS 的安全是有范圍的,在黑客攻擊、服務器劫持等情況下幾乎起不到作用。 * 在現有的證書機制下,[中間人攻擊](https://en.wikipedia.org/wiki/Man-in-the-middle_attack)依然有可能發生。 * HTTPS 需要更多的服務器資源,也會導致成本的升高。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看