HTTP與HTTPS技術細節及TLS密鑰交換與證書校驗全流程

HTTP與HTTPS技術細節及TLS密鑰交換與證書校驗全流程

引言

文檔目的與范圍

核心技術棧概述

本文檔的核心技術棧圍繞傳輸層安全協議(TLS)展開。TLS協議作為安全套接字層(SSL)的后繼標準,是現代網絡安全通信的基礎,其運行于OSI模型的傳輸層與應用層之間,主要提供三大核心安全保障:通過加密機制確保數據機密性、利用密碼哈希函數生成校驗和保障數據完整性、依托可信證書頒發機構(CA)頒發的數字證書實現通信方身份的認證性[1].

核心技術體系涵蓋多個關鍵組件,具體包括:網絡傳輸協議層面的HTTP與HTTPS協議;安全協議層面的TLS/SSL協議(后續將重點對比TLS 1.2與1.3的技術差異);身份認證層面的X.509證書體系;密鑰交換層面的ECDHE(橢圓曲線Diffie-Hellman臨時)算法;密鑰派生層面的HKDF(基于HMAC的密鑰派生函數);以及工具與實現層面的OpenSSL工具和Python的ssl模塊。這些技術組件共同構成了從證書生成到安全通信的完整技術鏈路,后續章節將對各組件的原理與實現細節進行系統闡述。

HTTP與HTTPS技術對比

協議定義與核心差異

HTTP(超文本傳輸協議)是應用層網絡協議,基于傳輸控制協議(TCP),用于在網絡間傳輸超文本數據,具有無狀態特性(每個事務獨立執行,連接在事務完成后斷開),默認運行在端口80,傳輸明文數據[2][3]。HTTPS(超文本傳輸安全協議)是HTTP的安全增強版本,通過結合傳輸層安全協議(TLS)或其前身安全套接層(SSL)實現加密通信,運行在傳輸層,默認使用端口443,傳輸密文數據以保障通信的機密性、完整性和真實性[2][4]。兩者的核心差異如下表所示:

對比維度HTTPHTTPS
協議層應用層傳輸層(基于TLS/SSL封裝) [2][3]
默認端口80443
數據傳輸格式明文傳輸,數據可直接被竊聽或篡改密文傳輸,通過TLS/SSL加密整個通信過程
安全性機制無加密機制,易受中間人攻擊,無法驗證身份通過TLS/SSL證書實現加密(公鑰與對稱加密結合)、身份驗證及數據完整性校驗
SEO影響無特殊優先級搜索引擎(如Google)優先索引HTTPS網站

此外,HTTPS因加密計算(如密鑰交換、數據加解密)會產生額外性能開銷,導致其傳輸效率略低于HTTP[2]。而HTTP的無狀態特性使其在簡單數據傳輸場景中具有更低的延遲和更高的響應速度。

安全性與應用場景

TLS協議基礎

TLS 1.2與1.3核心改進

TLS 1.3在TLS 1.2基礎上進行了多維度優化,核心改進體現在握手效率、密鑰交換機制及安全性增強三個方面。從握手流程來看,TLS 1.2需完成2個往返(2-RTT)才能建立安全連接,典型交互涉及5-7個數據包,包括ClientHello、ServerHello、ServerKeyExchange、ClientKeyExchange等消息的明文傳輸[6][7]。而TLS 1.3通過協議簡化將新連接握手壓縮至1-RTT,僅需三次交互即可完成密鑰協商,且ServerHello后所有消息均加密傳輸,顯著降低了連接建立延遲[8][9]。

性能指標TLS 1.2TLS 1.3改進幅度
握手RTT2-RTT1-RTT(新連接)<br>0-RTT(恢復)減少50-100%
數據包數量5-7個0-3個減少40-100%
首次數據發送時機握手完成后首次消息中可攜帶數據(0-RTT)顯著提前
加密起始點握手后期ServerHello后所有消息加密顯著提前

數據來源:[6][7][8]

KeyShare擴展是TLS 1.3實現1-RTT握手的關鍵機制。TLS 1.2依賴獨立的KeyExchange消息(如ServerKeyExchange和ClientKeyExchange)進行密鑰協商,而TLS 1.3通過ClientHello中的key_share擴展提前發送客戶端密鑰材料,服務器在ServerHello中通過對應擴展回應,省去了單獨的密鑰交換往返步驟[7]。這一設計將密鑰協商與握手初始階段合并,直接減少了1個RTT的延遲開銷。

PSK會話恢復機制進一步優化了連接延遲。TLS 1.2采用會話ID或會話票據恢復連接,仍需部分握手交互;而TLS 1.3引入預共享密鑰(PSK)替代傳統會話恢復方式,允許客戶端在首次消息(ClientHello)中攜帶應用數據,實現“零往返時間(0-RTT)”恢復,尤其在移動網絡和大規模服務場景下提升響應效率顯著[6][10]。不過,TLS 1.3對PSK采取更嚴格的安全策略,通過綁定特定密鑰派生函數(KDF)避免跨版本哈希不一致風險,而TLS 1.2允許PSK與任意哈希函數配合,存在潛在兼容性問題[6]。

在安全性方面,TLS 1.3徹底移除了靜態RSA密鑰交換及所有非前向保密(PFS)機制,僅保留臨時Diffie-Hellman(如ECDHE)密鑰交換方式。TLS 1.2中RSA密鑰交換依賴靜態私鑰,若私鑰泄露將導致歷史通信數據被解密,且易受Bleichenbacher類型攻擊;而TLS 1.3強制所有密鑰交換提供前向保密,即使長期密鑰泄露,已建立的會話密鑰仍無法被破解[6][8][11]。此外,TLS 1.3刪除了SHA-1、RC4、AES-CBC等不安全算法,僅支持AEAD加密套件(如AES-GCM、ChaCha20-Poly1305),并移除“重協商”功能,進一步降低攻擊面[6][10]。

安全特性TLS 1.2TLS 1.3安全改進
密鑰交換機制支持靜態RSA<br>可選臨時DH僅臨時DH(ECDHE)強制前向保密
加密算法SHA-1, RC4, AES-CBC等僅AEAD(AES-GCM, ChaCha20-Poly1305)移除所有已知漏洞算法
前向保密可選(僅ECDHE)強制實施消除靜態密鑰泄露風險
重協商功能支持移除防止降級攻擊
簽名算法RSA, DSA, ECDSA(可選)ECDSA, RSA-PSS(強調ECDSA)采用現代加密標準
會話恢復方式會話ID/會話票據預共享密鑰(PSK)減少安全憑證暴露面

數據來源:[6][8][11]

加密套件與算法選型

加密套件是TLS協議中用于定義安全通信所采用算法組合的規范,其命名規則遵循特定的結構。傳統加密套件格式通常表示為“TLS-密鑰交換算法-簽名算法-WITH-加密算法-摘要算法”,其中密鑰交換算法與簽名算法在部分情況下可合并[8][9]。例如,TLS_RSA_WITH_AES_256_GCM_SHA384表示采用RSA作為密鑰交換與簽名算法,AES-256-GCM作為加密算法,SHA384作為摘要算法[8][9]。而TLS 1.3對加密套件進行了簡化,僅支持基于認證加密與相關數據(AEAD)的算法組合,其套件格式直接體現為“TLS-加密算法-摘要算法”,例如TLS_AES_128_GCM_SHA256,其中摘要算法主要用于基于HMAC的密鑰派生函數(HKDF)[12][13]。

在TLS 1.3支持的加密算法中,AES-GCM與ChaCha20-Poly1305是兩種主流選擇。AES-GCM基于高級加密標準(AES)的伽羅瓦/計數器模式(GCM),而ChaCha20-Poly1305則由ChaCha20流密碼與Poly1305消息認證碼組合而成[8][13]。盡管輸入材料未直接提及兩者的性能差異,但在實際應用中,算法選型需結合具體場景需求。對于算法選擇,對稱加密推薦優先采用AES-GCM或ChaCha20-Poly1305,其中移動端場景通常優先選擇ChaCha20-Poly1305,因其在硬件加速支持有限的設備上表現更優[13]。此外,密鑰交換算法方面,建議優先選擇橢圓曲線算法(如secp256r1、x25519),這類算法具有計算效率高且安全性強的特點[13]。

TLS 1.3對加密套件的選擇進行了嚴格限制,僅保留安全性更強的套件,如TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256等,均為AEAD與HKDF的組合[8][13]。相比之下,TLS 1.2及更早版本支持超過百種加密套件,但多數存在安全弱點,可能導致漏洞[6]。因此,在協議版本選擇的基礎上,合理配置加密套件是保障通信安全的關鍵環節。

TLS密鑰交換全流程

ECDHE密鑰交換原理

ECDHE(Elliptic Curve Diffie-Hellman Ephemeral)是一種基于橢圓曲線密碼學(ECC)與臨時密鑰交換機制結合的密鑰協商協議,其核心目標是在客戶端與服務器之間安全交換對稱加密密鑰,并通過臨時密鑰生成機制提供前向保密性。該協議在TLS 1.3中被廣泛支持,通過客戶端與服務器的key_share擴展字段實現ECDH公鑰交換,進而計算共享秘密[8][9]。

密鑰生成、交換與驗證步驟

ECDHE密鑰交換過程可分為四個核心階段:

  1. 密鑰交換初始化:客戶端與服務器首先約定公共橢圓曲線參數,包括曲線類型(如secp256r1、secp384r1等標準曲線)和曲線基點G。這一步確保雙方基于相同的數學基礎進行后續計算[4][14]。
  2. 臨時密鑰對生成:客戶端隨機生成臨時私鑰a(整數),并通過橢圓曲線點乘法計算對應公鑰A = aG(其中表示橢圓曲線上的點乘運算);服務器同理生成臨時私鑰b和公鑰B = b*G[14][15]。
  3. 公鑰交換:客戶端通過TLS握手的ClientHello消息中的key_share擴展字段發送公鑰A,服務器通過ServerHello消息的key_share擴展字段返回公鑰B。該擴展字段包含NamedGroup(標識雙方協商的橢圓曲線)和key_exchange數據(公鑰字節流)[8][9]。
  4. 共享密鑰計算與驗證:客戶端使用本地私鑰a與服務器公鑰B計算共享秘密S = aB,服務器使用私鑰b與客戶端公鑰A計算S = bA。由于橢圓曲線點乘運算的交換性(aB = a(bG) = b(aG) = bA),雙方將得到相同的共享秘密S。隨后,S結合客戶端隨機數(Client Random)和服務器隨機數(Server Random),通過密鑰派生函數生成會話主密鑰,用于后續對稱加密通信[14][16]。
與RSA密鑰交換的對比及前向保密性優勢

RSA密鑰交換的核心缺陷在于缺乏前向保密性。在RSA模式中,客戶端生成pre-master密鑰后,使用服務器RSA公鑰加密并發送,服務器通過私鑰解密得到pre-master。若服務器長期私鑰泄露,攻擊者可解密歷史通信中截獲的加密pre-master,從而破解所有依賴該私鑰的會話密鑰[15]。

ECDHE通過“臨時”機制解決了這一問題:每次TLS握手均生成全新的臨時公私鑰對(a、b),且私鑰僅在本次會話中臨時存儲并在會話結束后銷毀。即使服務器長期私鑰泄露,攻擊者因無法獲取歷史會話的臨時私鑰(a、b),也無法計算出對應的共享秘密S,從而確保歷史會話的安全性不被影響[14][15]。此外,ECDHE相比傳統RSA或DH算法,在相同安全級別下密鑰長度更短(如256位ECC密鑰與3072位RSA密鑰安全級別相當),計算效率更高,適用于資源受限的場景(如IoT設備)[14]。

TLS 1.3中的KeyShare擴展字段

在TLS 1.3握手過程中,ECDHE公鑰交換通過ClientHello和ServerHello消息中的key_share擴展實現。該擴展字段包含兩個關鍵子字段:

  • NamedGroup:標識雙方協商的橢圓曲線類型,如secp256r1(NIST P-256)、x25519(Curve25519)等,用于確保雙方使用一致的橢圓曲線參數[8][9]。
  • key_exchange數據:存儲對應曲線的公鑰字節流,客戶端發送的公鑰A和服務器返回的公鑰B均通過該字段傳遞。通過Wireshark抓包可觀察到,ClientHello中的key_share擴展會列出客戶端支持的橢圓曲線列表及對應公鑰,服務器則在ServerHello中選擇其中一個曲線并返回自身公鑰[8]。

綜上,ECDHE通過橢圓曲線數學特性、臨時密鑰生成與key_share擴展,在實現高效密鑰交換的同時,解決了傳統RSA密鑰交換的前向保密缺陷,成為TLS 1.3中密鑰協商的核心機制。

TLS 1.3握手流程詳解

TLS 1.3的1-RTT握手流程通過精簡消息交互,實現了單次往返即可完成密鑰協商與認證,其核心步驟如下:

1. 客戶端發送ClientHello消息

客戶端首先發起握手,發送ClientHello消息,該消息包含基礎協議信息與擴展字段。其中,基礎結構包括2字節的ProtocolVersion(固定為0x0303,即TLS 1.2版本號,用于兼容舊協議)、32字節的Random隨機數、可變長度的SessionID(通常為空)、密碼套件列表(CipherSuites)及壓縮方法(通常無壓縮)[17]。擴展字段是協商核心,包含:

  • supported_versions:指定支持的TLS版本,如0x0304表示TLS 1.3;
  • key_share:提供客戶端的橢圓曲線公鑰數據,用于后續密鑰交換;
  • supported_groups:列出支持的橢圓曲線組,如secp256r1(0x0017)、x25519(0x001D)等;
  • signature_algorithms:聲明支持的簽名算法[7][17]。若服務器檢測到客戶端提供的密鑰共享(DHE)不匹配,會返回HelloRetryRequest,客戶端需重新發送包含正確key_share擴展的ClientHello[12]。
字段名長度說明示例/取值來源
ProtocolVersion2字節固定為0x0303(TLS 1.2版本號,用于兼容舊協議)0x0303[17]
Random32字節隨機數32字節隨機值[17]
SessionID可變會話標識(通常為空)[17]
CipherSuites可變支持的密碼套件列表TLS_AES_256_GCM_SHA384等[17]
CompressionMethods可變壓縮方法(通常無壓縮)0x00[17]
擴展字段
supported_versions可變支持的TLS版本(必須包含)0x0304 (TLS 1.3)[17]
key_share可變客戶端橢圓曲線公鑰x25519公鑰數據[7]
supported_groups可變支持的橢圓曲線組secp256r1(0x0017), x25519(0x001D)[17]
signature_algorithms可變支持的簽名算法rsa_pss_rsae_sha256等[17]
2. 服務端響應ServerHello及后續消息

服務端接收ClientHello后,完成協議與參數確認,并返回系列消息:

  • ServerHello:包含確認的TLS版本(通過supported_versions擴展明確TLS 1.3)、服務器隨機數、選定的密碼套件及key_share擴展(攜帶服務器橢圓曲線公鑰),完成密鑰交換參數協商[7][8];
  • 加密擴展:從此時起,后續所有握手消息(如證書、證書驗證)均使用協商生成的握手密鑰(handshake traffic keys)加密傳輸[8][13];
  • Server Certificate:發送X.509證書鏈,用于客戶端認證服務器身份;
  • Server Certificate Verify:服務器使用證書私鑰對握手消息進行簽名,證明其擁有證書對應的私鑰;
  • Server Finished:發送加密的完成消息,包含握手消息的MAC校驗,用于驗證握手過程的完整性[8][13]。
3. 雙方計算共享密鑰并派生會話密鑰

基于ClientHello與ServerHello中key_share擴展交換的橢圓曲線公鑰,客戶端與服務端通過橢圓曲線Diffie-Hellman(ECDHE)算法計算得到共享密鑰(pre-master secret)[7][15]。隨后,雙方使用HMAC-based提取和派生函數(HKDF)對共享密鑰進行處理,生成握手密鑰(用于加密握手消息)和應用層密鑰(用于后續應用數據加密),完成密鑰材料的安全派生[18]。

4. 客戶端驗證并完成握手

客戶端接收并驗證服務端消息:

  • 驗證服務器證書的有效性(如證書鏈、簽名等);
  • 驗證Server Certificate Verify的簽名,確認服務器身份;
  • 驗證Server Finished的MAC值,確保握手過程未被篡改[8]。驗證通過后,客戶端發送:
  • ChangeCipherSpec:僅用于協議兼容,指示切換至協商的加密套件;
  • Client Finished:加密的完成消息,包含客戶端視角的握手消息MAC校驗[8]。服務端驗證Client Finished后,握手正式結束,雙方進入應用數據傳輸階段,所有數據使用應用層密鑰加密[18]。

綜上,TLS 1.3的1-RTT握手通過優化消息交互與加密策略,在單次往返內完成密鑰交換、身份認證與完整性驗證,顯著提升了握手效率與安全性。

HKDF密鑰派生

在TLS 1.3中,密鑰派生過程依賴于HKDF(基于哈希的密鑰派生函數)實現,其核心目標是從ECDHE(橢圓曲線Diffie-Hellman Ephemeral)交換得到的共享密鑰(即輸入密鑰材料IKM)逐步生成保護通信所需的各類密鑰,包括握手密鑰(handshake_traffic_secret)和應用密鑰(application_traffic_secret)[9][18]。HKDF通過“提取(Extract)”和“擴展(Expand)”兩個邏輯步驟,將原始共享密鑰轉化為滿足安全性要求的會話密鑰,其設計符合RFC 5869標準定義[19]。

HKDF的核心步驟

HKDF的密鑰派生過程分為以下兩個關鍵階段:

  1. 提取階段(Extract)
    該階段將輸入密鑰材料(IKM)轉化為偽隨機密鑰(PRK)。具體通過HMAC-Hash函數實現,公式為:
    PRK = HMAC-Hash(salt, IKM)
    其中,salt為可選的隨機源(若未提供,則默認使用與哈希函數輸出長度相同的全0字節序列),IKM為ECDHE交換生成的共享密鑰[13][20]。此步驟的作用是“凈化”原始密鑰材料,確保輸出的PRK具有均勻的偽隨機性。

  2. 擴展階段(Expand)
    該階段利用PRK和上下文信息(Info)生成指定長度的輸出密鑰材料(OKM)。TLS 1.3中通過HKDF-Expand-Label函數實現擴展,其核心邏輯是迭代生成密鑰塊并截取所需長度,具體過程如下:

    • 定義HkdfLabel結構,包含輸出長度(length)、標簽(label,格式為“tls13_<具體標簽>”)和上下文(context,即握手消息的transcript hash);
    • 通過Derive-Secret函數調用HKDF-Expand-Label,公式為:
      Derive-Secret(Secret, Label, Messages) = HKDF-Expand-Label(Secret, Label, Transcript-Hash(Messages), Hash.length)
      其中,Secret為前序派生的秘密值(如握手秘密或主秘密),Transcript-Hash(Messages)為握手消息的哈希值,用于綁定密鑰與握手上下文,防止重放攻擊[9][19]。
TLS 1.3中基于HKDF的密鑰派生流程

從ECDHE共享密鑰(IKM)到握手密鑰和應用密鑰的派生流程如下:

  1. 生成握手秘密(Handshake Secret)
    ECDHE共享密鑰(IKM)作為HKDF的輸入,首先通過HKDF-Extract生成PRK。隨后,結合握手過程中的臨時參數(如salt),通過Derive-Secret函數派生出握手秘密,用于保護握手階段的消息傳輸[21]。

  2. 生成主秘密(Master Secret)
    握手秘密與握手消息的transcript hash作為輸入,再次通過HKDF-ExtractHKDF-Expand生成主秘密。主秘密是后續應用層密鑰派生的基礎,其安全性直接依賴于握手過程的完整性[9]。

  3. 生成流量密鑰(Traffic Secrets)
    主秘密通過Derive-Secret函數生成兩類流量密鑰:

    • 握手密鑰(handshake_traffic_secret):標簽為“handshake_traffic_secret”,用于加密握手階段的后續消息;
    • 應用密鑰(application_traffic_secret):標簽為“application_traffic_secret”,用于加密應用層數據(分為客戶端到服務器和服務器到客戶端兩個方向)[19][22]。
Python實現代碼(基于cryptography庫)

以下代碼模擬了TLS_ECDHE共享密鑰(IKM)通過HKDF派生握手密鑰和應用密鑰的過程,使用cryptography庫的hkdf模塊實現核心邏輯:

X.509證書校驗流程

證書結構與字段解析

信任鏈驗證

1. 驗證服務器證書由中間CA簽名

客戶端首先獲取服務器證書,該證書包含“頒發者”字段,指示其由中間CA(如Let’s Encrypt的R3中間CA)簽發。客戶端通過中間CA證書中的公鑰,對服務器證書的數字簽名進行驗證。具體而言,客戶端使用中間CA的公鑰解密服務器證書中的加密摘要,同時根據證書內容(如公鑰、有效期等)使用相同的哈希算法生成新摘要,若兩者一致,則確認服務器證書確實由該中間CA簽名且內容未被篡改[16][23]。

2. 驗證中間CA由根CA簽名

中間CA證書同樣包含“頒發者”字段,指向其上級CA(通常為根CA,如Let’s Encrypt的ISRG Root X1)。客戶端重復上述驗證邏輯:使用根CA證書的公鑰解密中間CA證書的加密摘要,并與生成的新摘要比對,以確認中間CA證書由根CA合法簽名[23][24]。若證書鏈存在多級中間CA(如某些場景包含二級中間CA),客戶端需遞歸驗證每一級中間CA的簽名,直至追溯至根CA[25]。

3. 確認根CA存在于本地信任存儲

根CA證書是證書鏈的信任起點,其自身由CA機構自簽名,且預安裝于客戶端的信任存儲中(如瀏覽器內置信任庫或操作系統信任存儲)。例如,Firefox瀏覽器通常內置約150個根CA證書,Chrome則依賴操作系統信任存儲并額外維護擴展驗證(EV)根CA列表[24]。客戶端檢查當前驗證的根CA證書是否存在于本地信任存儲,若存在,則判定整個證書鏈可信;若不存在(如自簽名證書),則需手動安裝至信任存儲方可通過驗證[26]。

驗證關鍵點:證書鏈需完整(無缺失中間CA,若缺失客戶端可從公共存儲庫自動獲取)、各級簽名有效、根CA受信任,三者缺一不可[23][27]。

證書吊銷驗證(CRL/OCSP)

證書吊銷驗證是確保證書有效性的關鍵環節,主要通過CRL(證書吊銷列表)和OCSP(在線證書狀態協議)兩種機制實現,二者在實時性、性能及隱私性方面存在顯著差異。

CRL由證書頒發機構(CA)定期發布,包含所有已吊銷證書的序列號,客戶端通過下載并檢查本地存儲的CRL文件完成驗證。其優勢在于無需實時網絡請求,可降低服務器負載,但存在緩存過期風險——若CRL更新不及時或客戶端未同步最新列表,可能導致已吊銷證書被誤判為有效[28][29]。OCSP則通過客戶端向OCSP響應器發送實時請求獲取證書狀態(Good/Revoked/Unknown),解決了CRL的實時性問題,但客戶端直接與響應器交互可能泄露訪問隱私,且頻繁請求會增加網絡開銷[29][30]。

特性CRLOCSP
驗證機制客戶端下載CA發布的吊銷列表客戶端實時查詢OCSP響應器
實時性定期更新(存在緩存過期風險)實時響應(解決實時性問題)
性能影響降低服務器負載增加網絡開銷(頻繁請求)
隱私性無直接交互(隱私風險低)客戶端-響應器直連(可能泄露訪問隱私)
狀態響應二進制列表(是/否吊銷)三態響應(Good/Revoked/Unknown)
實現復雜度需維護CRL分發點需部署OCSP響應器基礎設施
典型應用離線驗證場景高實時性要求場景

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

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

相關文章

廣播分發中心-廣播注冊流程

廣播是怎么注冊的呢&#xff1f;階段組件/數據結構作用描述存儲位置/關聯關系App進程階段BroadcastReceiver開發者自定義的廣播接收器&#xff0c;實現onReceive方法處理事件。App進程&#xff08;Activity/Service等組件內&#xff09;ReceiverDispatcher將BroadcastReceiver封…

OpenCV計算機視覺實戰(16)——圖像分割技術

OpenCV計算機視覺實戰&#xff08;16&#xff09;——圖像分割技術0. 前言1. 分水嶺算法1.1 應用場景1.2 實現過程2. GrabCut 交互式分割2.1 應用場景2.2 實現過程3. FloodFill3.1 應用場景3.2 實現過程小結系列鏈接0. 前言 圖像分割是計算機視覺中將像素劃分為具有特定語義或…

Coturn打洞服務器

* 概念理解&#xff1a;1. SDP協議&#xff1a;會話描述協議&#xff0c;視頻通話的雙方通過交換SDP信息進行媒體協商&#xff0c;從而選擇使用某一相同的媒體協議進行通信&#xff1b;TLS協議&#xff1a;基于TCP的安全層傳輸協議DTLS協議&#xff1a;基于UDP的安全層傳輸協議…

python flusk 監控

# 創建虛擬環境目錄 python3 -m venv /sda1/xunjian/venv # 激活虛擬環境 source /sda1/xunjian/venv/bin/activate # 激活后終端會顯示 (venv)創建虛擬環境&#xff08;在當前目錄&#xff09;&#xff1a;bashpython3 -m venv venv激活虛擬環境&#xff1a;bashsource venv/b…

VUE2 項目學習筆記 ? 語法 v-if/v-show

?語法頁面渲染的時候&#xff0c;需要服務器傳過來的對象中的一個屬性&#xff0c;然后根據這個屬性用v-for渲染標簽&#xff0c;這里寫的v-for".... in dataList.goodsList"但是當解析到這行語法的時候&#xff0c;dataList還沒返回&#xff0c;因此控制臺會報錯找…

使用qemu命令啟動虛擬機

1. 安裝相關軟件 yum install qemu edk2* libvirt -y 啟動libvirt服務 systemctl start libvirtd systemctl status libvirtd2. 創建虛擬機 2.1. qemu啟動命令示例 /usr/bin/qemu-system-loongarch64 \-machine virt,accelkvm \-nodefaults \-m 2048 \-smp 2,maxcpus4,co…

大模型系統化學習路線

人工智能大模型系統化學習路線一、基礎理論筑基&#xff08;1-2個月) 目標&#xff1a;建立大模型核心認知框架 核心內容&#xff1a; 深度學習基礎&#xff1a;神經網絡原理、CNN/RNN結構、梯度下降算法大模型本質&#xff1a;Transformer架構&#xff08;重點掌握注意力機制、…

LLaMA-Factory 微調可配置的模型基本參數

LLaMA-Factory 微調可配置的模型基本參數 flyfish 基本參數 一、模型加載與路徑配置參數名類型描述默認值model_name_or_pathOptional[str]模型路徑&#xff08;本地路徑或 Huggingface/ModelScope 路徑&#xff09;。Noneadapter_name_or_pathOptional[str]適配器路徑&#xf…

Ubuntu 22 安裝 ZooKeeper 3.9.3 記錄

Ubuntu 22 安裝 ZooKeeper 3.9.3 記錄 本文記錄在 Ubuntu 22.04 系統上安裝 ZooKeeper 3.9.3 的過程&#xff0c;包含 Java 環境準備、配置文件調整、啟動與停機操作、以及如何將 ZooKeeper 注冊為系統服務。 一、準備環境 ZooKeeper 3.9.x 要求 Java 11 或更高版本&#xff…

FreeSwitch通過Websocket(流式雙向語音)對接AI實時語音大模型技術方案(mod_ppy_aduio_stream)

FreeSwitch通過WebSocket對接AI實時語音大模型插件技術方案1. 方案概述 基于FreeSWITCH的實時通信能力&#xff0c;通過WebSocket協議橋接AI大模型服務&#xff0c;實現低延遲、高并發的智能語音交互系統。支持雙向語音流處理、實時ASR/TTS轉換和動態業務指令執行。 1753095153…

航班調度優化策略全局概覽

在機場關閉場景下的航班恢復工作&#xff0c;是將機場關閉期間所有的航班進行取消然后恢復還是將機場關閉期間航班全部延誤而后調整呢&#xff1f;簡單來說&#xff0c;在實際操作中&#xff0c;既不是無差別地全部取消&#xff0c;也不是無差別地全部延誤。這兩種“一刀切”的…

spring boot 異步線程@Async 傳遞 threadLocal數據

將父類的 threadLocal 的數據 在線程池時&#xff0c;可以轉給子線程使用。 Async 的使用。 第一步在啟動服務加上 EnableAsync 注解。 EnableAsync public class NetCoreApplication {... ... }第二步&#xff1a;導入阿里 線程工具類<dependency><groupId>com.a…

AI產品經理成長記《零號列車》第一集 邂逅0XAI列車

《零號列車》絕非傳統意義上的 AI 產品經理教程 —— 它是我沉淀二十多年跨行業數字化轉型與工業 4.0 實戰經驗后,首創的100集大型小說體培養指南。那些曾在千行百業驗證過的知識與經驗,不再是枯燥的文字堆砌,而是化作一場沉浸式的學習旅程。? 這里沒有生硬的理論灌輸,而…

[C++11]范圍for循環/using使用

范圍for循環 范圍for循環&#xff08;Range-based for loop&#xff09;是 C11 引入的一種簡潔的循環語法&#xff0c;用于遍歷容器中的元素或者其他支持迭代的數據結構。 范圍for循環可以讓代碼更加簡潔和易讀&#xff0c;避免了傳統for循環中索引的操作。 下面是范圍for循環的…

簡單了解下npm、yarn 和 pnpm 中 add 與 install(i) 命令的區別(附上兩圖帶你一目明了)

目錄 pnpm 中 add 和 i 的區別 npm 中 add 和 i 的區別 yarn 中 add 和 i 的區別 附上兩圖帶你一目明了&#xff1a; npm、yarn和pnpm的三者區別圖&#xff1a; i 和 add 的核心區別圖&#xff1a; 個人建議&#xff1a;在項目中保持命令使用的一致性&#xff0c;選擇一種…

ESP32-S3學習筆記<2>:GPIO的應用

ESP32-S3學習筆記&#xff1c;2&#xff1e;&#xff1a;GPIO的應用1. 頭文件包含2. GPIO的配置2.1 pin_bit_mask2.2 mode2.3 pull_up_en和pull_down_en2.4 intr_type3. 設置GPIO輸出/獲取GPIO輸入4. 中斷的使用4.1 gpio_install_isr_service4.2 gpio_isr_handler_add4.3 gpio_…

得物視覺算法面試30問全景精解

得物視覺算法面試30問全景精解 ——潮流電商 商品鑒別 視覺智能&#xff1a;得物視覺算法面試核心考點全覽 前言 得物App作為中國領先的潮流電商與鑒別平臺&#xff0c;持續推動商品識別、真假鑒別、圖像搜索、內容審核、智能推薦等視覺AI技術的創新與落地。得物視覺算法崗位…

[Linux入門] Linux 賬號和權限管理入門:從基礎到實踐

一、Linux 用戶賬號&#xff1a;誰能訪問系統&#xff1f; 1??超級用戶&#xff08;root&#xff09; 2??普通用戶 3??程序用戶 二、組賬號&#xff1a;讓用戶管理更高效 1??組的類型 2??特殊組 三、用戶與組的 “身份證”&#xff1a;UID 和 GID 四、配置文…

阿里云ssl證書自動安裝及續訂(acme)

目錄 一、shell命令安裝 二、docker run安裝 三、docker compose安裝 一、shell命令安裝 # 安裝acme curl https://get.acme.sh | sh -s emailfloxxx5163.com# 注冊zerossl .acme.sh/acme.sh --register-account -m flowxxx25163.com --server zerossl# 獲取證書 export Al…

@fullcalendar/vue 日歷組件

功能&#xff1a;日程安排&#xff0c;展示日歷&#xff0c;可以用來做會議日歷&#xff0c;可以跨日期顯示日程。 Fullcalendarvue3 日歷組件 參考文檔&#xff1a;【vue2】一個完整的日歷組件 fullcalendar&#xff0c;會議預約功能 中文說明文檔&#xff1a;https://www.he…