IPsec VPN簡介

什么是IPsec?

IPsec(Internet Protocol Security)是為IP網絡提供安全性的協議和服務的集合,它是VPN(Virtual Private Network,虛擬專用網)中常用的一種技術。其實就是一種協議簇(類似TCP/IP協議簇),IPsec VPN就是基于IPsec協議簇來進行封裝的一種VPN技術。VPN的核心就是隧道技術,隧道技術的核心就是封裝技術。

通信雙方通過IPsec建立一條IPsec隧道,IP數據包通過IPsec隧道進行加密傳輸,有效保證了數據在不安全的網絡環境如Internet中傳輸的安全性。


IPsec VPN 保護的是點對點之間的通信,通過IPsec VPN可以在主機和主機之間、主機和網絡安全網關之間或網絡安全網關(如路由器、防火墻)之間建立安全的隧道連接。其協議主要工作在IP層,在IP層對數據包進行加密和驗證。

IPsec?VPN的工作流程

大致可以分為四個階段:

1、識別“感興趣流”。網絡設備接收到報文后,通常會將報文的五元組等信息和IPsec策略進行匹配來判斷報文是否要通過IPsec隧道傳輸,需要通過IPsec隧道傳輸的流量通常被稱為“感興趣流”。

2、協商安全聯盟(Security Association)。SA是通信雙方對某些協商要素的約定,比如雙方使用的安全協議、數據傳輸采用的封裝模式、協議采用的加密和驗證算法、用于數據傳輸的密鑰等,通信雙方之間只有建立了SA,才能進行安全的數據傳輸。
????????識別出感興趣流后,本端網絡設備會向對端網絡設備發起SA協商。在這一階段,通信雙方之間通過IKE協議先協商建立IKE SA(用于身份驗證和密鑰信息交換),然后在IKE SA的基礎上協商建立IPsec SA(用于數據安全傳輸)。

3、數據傳輸。IPsec SA建立成功后,雙方就可以通過IPsec隧道傳輸數據了。IPsec為了保證數據傳輸的安全性,在這一階段需要通過AH或ESP協議對數據進行加密和驗證。加密機制保證了數據的機密性,防止數據在傳輸過程中被竊取;驗證機制保證了數據的真實可靠,防止數據在傳輸過程中被仿冒和篡改。
????????如下圖,IPsec發送方會使用加密算法和加密密鑰對報文進行加密,即將原始數據“喬裝打扮”封裝起來。然后發送方和接收方分別通過相同的驗證算法和驗證密鑰對加密后的報文進行處理得到完整性校驗值ICV。如果兩端計算的ICV相同則表示該報文在傳輸過程中沒有被篡改,接收方對驗證通過的報文進行解密處理;如果ICV不相同則直接丟棄報文。
IPsec VPN中的數據加密流程:

4、隧道拆除。通常情況下,通信雙方之間的會話老化(連接斷開)即代表通信雙方數據交換已經完成,因此為了節省系統資源,通信雙方之間的隧道在空閑時間達到一定值后會自動刪除。


IKE (互聯網密鑰交換協議)
?

主要用來完成IPsec中需要的密鑰相關參數的協商工作,可以動態建立IPsec SA 。有兩個版本IKE V1、IKE V2

IKE中的三個協議

1、SKEME
2、OAKLEY
3、ISAKMP ISAKMP(互聯網安全聯盟密鑰管理協議)

我們重點了解第三個ISAKMP ISAKMP(互聯網安全聯盟密鑰管理協議)

這就是IKE協議的本體,主要用來完成IPSEC中需要的密鑰相關參數的協商工作。可以動態建立IPsec SA UDP500----源、目標端口都必須是500。

SKEME、OAKLEY ---這兩個協議可以理解為是IKE協商過程中使用到的資源庫(了解即可)

注意:身份認證是建立安全通道的前提。

IKE第一階段

主要目的是為了獲得建立IPSEC SA時使用的密鑰,以及進行身份認證。

IKE SA(ISAKMP SA)-----這個SA是雙向邏輯的,不區分源和目標。

主模式:默認使用IP地址作為身份標識(也要作為PSK的識別標志),使用6個數據包進行交互,安全性更高

這里我們根據上圖中的各個數據包單獨進行分析:

第一二個數據包:進行SA交換

1、Cl--- cookie ---這個參數每個數據包中都會攜帶,在IKEV2中,變成了SPI,在這里作用類似。 2,SA---里面攜帶的是需要協商的安全參數 ------“五元組"(如下)

加密算法,哈希算法,身份認證,DH組,SA存活期
AES ??????????????MD5???????? PSK???????? DH2 ?????84600s(默認值)

注意:手工建立的SA,一經建立,則將永久有效;但是IKE建立的SA,需要配置生存周期,周期時間到了之后,將重新建立SA。時間可以不同,不同的話按照小的來執行。

第二個回包主要確認安全參數,如果安全參數都可以對的上,則將繼續完成后面的協商。如果參數沒有對上,則將回復一個負載拒絕報文,結束IKESA的建立。

第三四個數據包 ---DH密鑰交換 ---對稱密鑰1,NI,Nr---代表的是隨機數 2,X,Y --- DH算法中需要公開的參數這里,為了加強安全性,DH算法會生成四種密鑰

種子密鑰 --- 剩余三種密鑰都需要加入種子密鑰運算得出,并且,種子密鑰中計算時,會攜帶預共享密鑰

SKEYID_e---加密密鑰 --- g^ir(代表的就是DH算法中計算出來的Z),CKY-I/CKY-R(前面雙方攜帶的cookie值)----用于第一個階段5,6數據包和第二階段數據包加密使用。

SKEYID_a ---- 驗證密鑰 ---用于第二階段hash時使用的密鑰 ---HMAC算法(結合密鑰的HASH算法),安全性比不加入密鑰的HASH算法更高。

SKEYID_d ---推導密鑰 ---用于計算最終密鑰(最終加密數據的密鑰)的素材

注意:在NAT環境,或是IP地址會變化的場景下,不適合用主模式。

野蠻模式?
特點:可以自定義身份標識,速度快,只需要三個數據包就可以完成標識,安全性低

注意:在野蠻模式中,可以自定義身份標識,主要是因為身份信息不需要加密,并且,前兩個數據包都無法加密,所以,野蠻模式安全性較低。僅第三個數據包會進行加密。但是,野蠻模式適用于NAT環境以及IP地址不固定的環境。

主模式和野蠻模式的區別

第二階段

基于已經建立的安全通道,來協商建立IPSEC SA的安全參數,完成后,則標志著IPSEC SA的建立。 快速模式(quick mode) UDP500

需要協商的安全參數

加密算法 ---正式傳輸數據時使用的加密算法(加密算法協商完成后,會計算密鑰第一階段計算出來的推導密鑰會加入到該密鑰的計算中)

HASH算法 ---正式傳輸數據時進行完整性校驗的算法

安全協議 ---AH/ESP

封裝模式 --- 傳輸模式/隧道模式

存活時間

可以了解一下這個協議
PFS --- 密鑰完美向前保密 --- 正常工作中,第二階段的最終密鑰是通過第一階段的推導密鑰計算出來的,但是,這樣做不安全,推導密鑰泄露可能導致最終密鑰泄露。所以,可以開啟這個PFS技術(注意:要開啟需要兩端設備都開啟才行),之后,則將在第二階段重新進行一次DH交換,計算最終的密鑰,從而提高安全性。

數據傳輸階段

VPN黑洞:隧道建立之后,如果其中一段的設備異常重啟,另一端還在有效期內,則他發送的數據將有去無回,就形成了VPN黑洞。

解決方法
DPD死亡對等體檢測。類似于心跳檢測機制 ---采用空閑計時器原理 ---兩邊同時開啟一個固定時間的計時器,期間數據值直接發過去,如果計時器超時,則數據發送前,先發送一個DPD檢測報文,如果收到對方的DPD應答報文,則將重置計時器。如果沒有收到,并且,連續5次都沒有收到,則將拆掉安全通道。


最后,在面試過程中常問的一個問題,IPSec SA和IKE SA誰是單向誰是雙向?

IKE SA 是雙向的,兩端只需要構建一條SA就可以共同擁有了;
IPSec SA是單向的,所以就需要創建兩條。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12760.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12760.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12760.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

揭秘SmartEDA魅力:為何眾多學校青睞這款電路仿真軟件?

在當今數字化、信息化的教育時代,電子電路仿真軟件已成為電子學教學不可或缺的重要工具。其中,SmartEDA電路仿真軟件以其強大的功能、用戶友好的界面以及豐富的教育資源,贏得了眾多學校的青睞。那么,究竟是什么原因讓SmartEDA成為…

如何在阿里云申請免費SSL證書(三個月有效)

SSL證書主要用于建立Web服務器和客戶端間可信的HTTPS協議加密鏈接,以防止數據在傳輸過程中被篡改,避免信息泄露。阿里云提供了多種品牌和類型的SSL證書,以滿足不同用戶的需求。您可以根據自己的預算、域名類型以及網站類型,選擇購…

軟件工程期末復習(7)需求過程

需求分析 需求過程 什么是需求過程? 需求過程是用來導出、確認和維護系統需求文檔的一組結構化活動。通常,一個良好的需求過程應包括下列活動: 需求提取需求分析和協商需求確認 需求提取 需求提取是通過與客戶、系統用戶和其他與系統開發相…

Cannot read properties of undefined (reading ‘init‘)報錯

出現這個報錯是印象項目沒有引echarts包 npm i echarts 下包 然后在main.js中引入 import echarts from echarts Vue.prototype.$echarts echarts 如果還不行 import * as echarts from echarts; 更改一下引入方式 ok了

vue3 + ts中,element-plus組件通過ref引用組件內方法,顯示提示

在vue3 ts 項目中,我們通過ref引用element-plus組件內部方法時,編輯器沒有提示信息,通常我們都是如下寫法 這里想進行一下表單校驗,需要引用el-form組件中的validate方法,從這里可以看出是沒有給相應的提示信息的。這…

JavaScript對象的聲明

JS聲明對象的語法 1 通過new Object()直接創建對象2 通過 { }形式創建對象 1 通過new Object()直接創建對象 代碼 var person new Object(); // 給對象添加屬性并賦值 person.name"張小明"; person.age10; person.foods["蘋果","橘子","香…

基于多傳感器的智能小區安防系統設計與實現-設計說明書

設計摘要: 本設計是基于多傳感器的智能小區安防系統的設計與實現。系統主要包括煙霧和溫度傳感器、人體紅外傳感器、OLED顯示屏、WiFi模塊和按鍵控制等組件。通過這些組件的協作,實現了火災檢測、人員監測、數據顯示和遠程控制等功能。 首先&#xff0…

Git—常用命令

官方 Git - Book (git-scm.com) 常用命令 命令作用git config --global user.name 用戶名設置用戶作者git config --global user.email 郵箱設置用戶郵箱 git init初始化本地倉庫git status查看本地倉庫狀態 git add 文件名 添加到暫存區git commit -m "提交日志…

Unity使用sherpa-onnx實現離線語音合成

sherpa-onnx https://github.com/k2-fsa/sherpa-onnx 相關dll和lib庫拷進Unity,官方示例代碼稍作修改 using SherpaOnnx; using System; using System.IO; using System.Runtime.InteropServices; using UnityEngine;public class TTS : MonoBehaviour {public st…

【C++】vector的底層原理講解及其實現

目錄 一、認識vector底層結構 二、初始化vector的函數 構造函數拷貝構造賦值構造initializer_list構造迭代器區間構造 三、迭代器 四、數據的訪問 五、容量相關的函數 六、關于數據的增刪查改操作 一、認識vector底層結構 STL庫中實現vector其實是用三個指針來完成的&#x…

Promise 還能這樣理解呀!

目錄: 1、Promise是什么 2、Promise三種狀態 3、Promise如何使用 4、Promise作用

一種快速提升文件傳輸速度的方法

在面對網絡條件不理想時,進行文件傳輸往往會導致傳輸速率的顯著下降。為了克服這一難題,鐳速軟件特別引入了一系列創新的設置選項,旨在顯著提升文件傳輸速率。通過這些優化措施,用戶即使在網絡不佳的情況下,也能享受到…

機器人工具箱學習(三)

一、動力學方程 機器人的動力學公式描述如下: 式中, τ \boldsymbol{\tau} τ表示關節驅動力矩矢量; q , q ˙ , q \boldsymbol{q} ,\; \dot{\boldsymbol { q }} ,\; \ddot{\boldsymbol { q }} q,q˙?,q?分別為廣義的關節位置、速度和加速…

uniapp如何打包預約上門按摩APP

uniapp如何打包預約上門按摩APP? 開發工具:HBuilderX 一、創建移動應用 1、 點擊此處微信開放平臺 2、點擊【管理中心 - 移動應用 - 創建移動應用】填寫資料后等待審核 app運行流程圖 簽名如何獲取: 1)先把打包好的app安裝在手…

uniapp 小程序低功耗藍牙配網 ble配網 物聯網

1.獲取藍牙列表 bleList.vue <template><view><button touchstart"startSearch">獲取藍牙列表</button><scroll-view :scroll-top"scrollTop" scroll-y class"content-pop"><viewclass"bluetoothItem&q…

java多線程——線程池

概述 線程池是管理java線程生命周期的工具 降低資源消耗。通過池化技術能夠重復利用已創建的線程&#xff0c;降低線程頻繁創建和銷毀造成的資源消耗提高線程的可管理性。無需程序員手動銷毀線程&#xff0c;控制線程創建的數量&#xff0c;避免無限制的創建影響系統穩定性 …

找不到kotlin.Pair的類文件

需要添加kotlin的依賴&#xff1a; implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.22"

OpenHarmony上移植memtester

1. 下載源碼&#xff1a; wget https://pyropus.ca./software/memtester/old-versions/memtester-4.6.0.tar.gz 2. 解壓并指定交叉編譯方式 解壓 tar -xvf memtester-4.6.0.tar.gz 修改conf-cc和conf-ld&#xff0c;指定交叉編譯方式 conf-cc conf-ld 3. 編譯 直接運行m…

Ubuntu安裝ZLMediaKit

方式一 1、安裝vcpkg 在Ubuntu上安裝vcpkg的步驟如下&#xff1a; 安裝必要的依賴&#xff1a; 首先&#xff0c;你可能需要安裝cmake和ninja-build。你可以使用apt包管理器來安裝它們&#xff1a; bash復制代碼sudo apt install cmake ninja-build下載vcpkg源碼&#xff1a;…

后端開發面經系列 -- 阿里C++二面面經

阿里C二面面經 公眾號&#xff1a;阿Q技術站 來源&#xff1a;https://www.nowcoder.com/feed/main/detail/fc4a48403b534aafa6a6bce14b542c4e?sourceSSRsearch 1、智能指針&#xff1f; std::shared_ptr&#xff1a; 原理&#xff1a;std::shared_ptr是基于引用計數的智能指…