也來聊聊 HTTPS.

来源:https://www.cnblogs.com/jmcui/archive/2020/06/22/13151305.html
-Advertisement-
Play Games

前言: 網上聊 HTTPS 的文章已經數都數不過來了吧,厚著臉皮,整理下讀書筆記,結合平常項目的實踐,也來聊聊 HTTPS。 ##一、為什麼需要 HTTPS? 眾所周知,HTTP 協議具有無連接、不可靠、盡最大努力的特點,這也為 HTPP 協議帶來信息竊聽或身份偽裝等安全問題。主要體現在幾個方面: ...


前言: 網上聊 HTTPS 的文章已經數都數不過來了吧,厚著臉皮,整理下讀書筆記,結合平常項目的實踐,也來聊聊 HTTPS。

一、為什麼需要 HTTPS?

眾所周知,HTTP 協議具有無連接、不可靠、盡最大努力的特點,這也為 HTPP 協議帶來信息竊聽或身份偽裝等安全問題。主要體現在幾個方面:

  • 通信使用明文(不加密),內容可能會被竊聽。
  • 不驗證通信方的身份,因此有可能遭遇偽裝。
  • 無法證明報文的完整性,所以有可能已遭篡改。

那要如何做到防止竊聽保護信息呢?最為普及的就是加密技術。

  • 通信的加密:用 SSL(Secure Socket Layer,安全套接層)或 TLS(Transport Layer Security,安全層傳輸協議)建立安全通信線路之後,就可以在這條線路上進行 HTTP 通信了。與 SSL/TLS 組合使用的 HTTP 就是 HTTPS,通常 HTTP 直接和 TCP 通信,當使用 SSL 時,則演變成先與 SSL 通信,再由 SSL 和 TCP 通信了,所以 HTTPS 並不是一種新的協議。
  • 內容的加密: 對 HTTP 協議傳輸的內容本身加密,即把 HTTP 報文里所含的內容進行加密處理。

SSL 協議最初是由瀏覽器開發商網景通信公司率先倡導的,開發過 SSL3.0 之前的版本。IETF 以 SSL3.0 為基準,後又制定了 TLS1.0、TLS1.1 和 TLS1.2。TSL 是以 SSL為原型開發的協議,有時會統一稱該協議為 SSL。當前主流的版本是 SSL3.0 和 TLS1.0。

SSL 不僅提供加密處理,而且還使用了一種被稱為證書的手段,可用於確定通信方。

二、HTTPS 怎麼來保障通信安全的?

HTTPS 具有加密、認證以及完整性保護的功能。

1. 加密

客戶端和服務端想要進行安全的通信,首先想到的就是對通信雙方的內容進行加密處理。客戶端利用“密鑰”加密內容,服務端利用“密鑰”解密內容,反之亦然。這種方式稱為對稱(共用密鑰)加密。

對稱加密客戶端和服務端的“密鑰”是一致的,因此,客戶端和服務端之間的“密鑰”傳輸不可避免,如果“密鑰”在傳輸途中被盜用,那麼加密處理就沒有意義了。

那麼如何保護“密鑰”的傳輸安全呢?實踐的思路是非對稱(公開密鑰)加密,服務端擁有 公鑰(public key)+ 私鑰(private key)的密鑰對,公鑰任何人都可以獲取,私鑰只保存在服務端。以下是 SSL 建立安全通信線路的過程。

  1. 服務端將公鑰傳輸給客戶端。
  2. 客戶端通過公鑰加密“密鑰”(客戶端生成)得到一個加密串並傳輸給服務端。
  3. 服務端根據私鑰解密加密串得到“密鑰”。
  4. 雙方通過“密鑰”加密傳輸。

非對稱加密“密鑰”的方式很好的保障了“密鑰”的安全傳輸,因為即使傳輸過程中加密串被盜用了,由於盜用者沒有私鑰信息,也無法得到加密串中的“密鑰”信息。

HTTPS 採用對稱(共用密鑰)加密和非對稱(公開密鑰)加密兩者並用的混合加密機制。之所以要這麼複雜,是因為非對稱加密的處理速度相較於對稱加密要慢,因此,我們一般在交換“密鑰”環節使用非對稱加密,之後的建立通信交換報文階段則使用對稱加密方式。

2. 認證

遺憾的是,非對稱加密傳輸“密鑰”的方式仍然有缺陷,那就是無法證明伺服器公鑰本身就是貨真價實的公鑰。比如,接收到某台伺服器的公鑰,如何證明公鑰就是原本預想的那台伺服器發行的公鑰呢?或許在公鑰傳輸途中,真正的公鑰已經被攻擊者替換掉了。

電腦科學領域的任何問題都可以通過增加一個間接的中間層來解決。

這裡我們引入的中間層就是數字證書認證機構(CA,Certificate Authority),數字證書認證機構處於客戶端與伺服器雙方都可信賴的第三方機構的立場上,以下是數字證書認證機構的業務流程。

  1. 伺服器的運營人員向數字證書認證機構提出公開密鑰的申請。
  2. 數字證書認證機構在判明提出申請者的身份之後,會對已申請的公開密鑰做數字簽名,然後分配這個已簽名的公開密鑰,並將該公開密鑰放入公鑰證書。
  3. 伺服器將公鑰證書下發給客戶端。
  4. 客戶端使用公鑰證書的公開密鑰,對那張證書上的數字簽名進行驗證,一旦驗證通過,客戶端便可明確兩件事:一,認證伺服器的公開密鑰的是真實有效的數字證書認證機構頒發的。二,伺服器的公開密鑰是值得信賴的。

HTTPS 中還可以使用客戶端證書,以客戶端證書進行客戶端認證,證明伺服器正在通信的對方始終是預料之內的客戶端,其作用跟伺服器證書如出一轍。

使用 OpenSSL 這套開源程式,每個人都可以構建一套屬於自己的認證機構,從而自己給自己頒發伺服器證書,但該伺服器證書在互聯網上不可作為證書使用,因為個人並不是可信任的三方機構。

3. 完整性保護

基於 SSL 進行 HTTP 通信時,應用層發送數據會附加一種叫做 MAC(Message Authentication Code)的報文摘要,MAC 能夠查知報文是否遭到篡改,從而保護報文的完整性。

三、HTTPS 的通信過程

CBC 模式(Cipher Block Chaining)又名密碼分組鏈接模式。在此模式下,將前一個明文塊加密處理後和下一個明文塊做 XOR 運算,使之重疊,然後再對運算結果做加密處理。 對第一個明文塊做加密時,要麼使用前一段密文的最後一塊,要麼利用外部生成的初始向量(initial vector, IV)。

四、HTTPS 的缺點?

處理速度上,由於 HTTPS 還需要做伺服器、客戶端雙方加密及解密過程,因此會消耗 CPU 和記憶體等硬體資源。

通信上,和單純 HTTP 通信相比,SSL 通信會消耗部分網路資源。

綜上所述,相較於 HTTP 通信來說,HTTPS 通信速度會變慢。針對速度變慢這一問題,並沒有根本性的解決方案,我們會使用 SSL 加速器這種(專用伺服器)硬體來改善該問題。 該硬體為 SS通信專用硬體,相對軟體來講,能夠提高數倍 SSL 的計算速度。

另外,SSL 證書的費用開銷也是使用 HTTPS 的考慮因素之一(阿裡雲/騰訊雲有免費的 SSL 證書可以申請使用)。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 為什麼要搭建港股交易平臺?那就要問股民們為什麼會選擇港股進行投資了?一般的股民可能有人會說:還能為啥啊?賺錢唄!!!但是選擇投資港股,卻可能不是簡單的賺錢這麼簡單。可能很多人並不瞭解香港市場,畢竟這是一個境外市場,運作機制和操作風格都和我們熟悉的A股有很大的不同。 與A股相比,港股的優勢是比較明顯的 ...
  • smartadmin.core.urf 這個項目是基於asp.net core 3.1(最新)基礎上參照領域驅動設計(DDD)的理念,並參考目前最為了流行的abp架構開發的一套輕量級的快速開發web application 技術架構,專註業務核心需求,減少重覆代碼,開始構建和發佈,讓初級程式員也能開 ...
  • 1.MyBatis緩存 MyBatis 包含一個非常強大的查詢緩存特性,它可以非常方便地配置和定製.緩存可以極大的提升查詢效率. 1).一級緩存 public Employee getEmpById(Integer id); <select id="getEmpById" resultType="c ...
  • 今天在jsp頁面中使用了EL表達式,同時EL表達式在for迴圈中,但是EL表達式無法與java代碼同時使用,所以記錄一下如何把java中的變數傳遞過去。 示例: <% for(int i=0;i<list.size();i++){ %> <tr> <td>${list[i].key1}</td> < ...
  • 一、基礎數據類型補充內容 1、字元串 s1 = 'taobao jD shopping' print(s1.capitalize()) #首字母大寫,其餘小寫 print(s1.swapcase()) #大小寫翻轉 print(s1.title()) #每個單詞的首字毒大寫 ret2 = s1.ce ...
  • 本教程源碼請訪問:tutorial_demo SSM整合可以使用多種方式,我們純註解的方式,拋棄所有的xml配置文件(包括web.xml),使用Java配置類和註解進行配置。 SSM的整體思路:整合Spring和SpringMVC,整合Spring和MyBatis,兩兩整合。 一、環境準備 1.1、 ...
  • 本教程源碼請訪問:tutorial_demo SSM整合可以使用多種方式,我們採用XML+註解的方式 SSM的整體思路:整合Spring和SpringMVC,整合Spring和MyBatis,兩兩整合。 一、環境準備 1.1、建庫建表 DROP DATABASE IF EXISTS ssm; CRE ...
  • 爬取彈幕 1. 從手機埠進入網頁爬取找到介面 2.代碼 import requests from lxml import etree import numpy as np url='https://api.bilibili.com/x/v1/dm/list.so?oid=198835779' he ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...