WebRTC服務器Coturn服務器用戶管理和安全性

1、概述

Coturn服務器對用戶管理和安全方面也做了很多的措施,以下會介紹到用戶方面的設置

1.1、相關術語

1.1.1 realm

在 coturn 服務器中,域(realm)是一種邏輯上的分組概念,用于對不同的用戶群體、應用或者服務進行區分和管理,可以用turnadmin工具進行管理域。

可以針對同一服務器不同的域進行權限、連接會話、流量的控制。

1.1.2 origin

在coturn服務器中,源(origin)可以用在多租戶或者隔離環境

2、用戶管理

coturn的用戶主要分為 web的admin用戶(web-admin配置),cli用戶(telnet訪問配置),普通用戶

2.1 Coturn服務器的用戶類型

2.1.1?web-admin用戶

可以通過網頁訪問管理整個coturn服務器,查看coturn服務器配置,添加普通用戶,設置REST API的共享密鑰

2.1.2 cli用戶

可以通過telnet協議訪問查看當前coturn服務器的信息,會話數等操作,這是虛擬的用戶,其實無需添加cli用戶,只需要在配置文件turnserver.conf配置了cli功能、設置密碼即可通過telnet登錄coturn服務器進行查看coturn服務器的狀態。

2.1.3 普通用戶

訪問coturn服務器進行通信, 可以在/etc/turnserver.conf中添加認證

2.2 用戶訪問認證與安全性

coturn支持用戶訪問認證控制。用戶的訪問認證機制分為長期憑證機制和臨時憑證機制

2.2.1 長期憑證機制(long term credentials mechanism)

定義與作用:基于RFC5389規范,固定用戶名+訪問密碼設置,憑證長期有效

安全性: 安全性比較弱(靜態密碼容易泄露)

適用場景:可信網絡環境

配置: 在turnserver.conf文件配置如(user=test:123)或者通過turnadmin工具添加或者通過web-admin網頁訪問直接添加用戶

2.2.2 臨時憑證機制

定義與作用:通過時間戳+共享密鑰動態生成的臨時憑證,限制憑證有效期,防止重放攻擊

安全性:高(動態密碼+時間窗口)

適用場景:公網/高風險環境

配置:在turnserver.conf中配置開啟use-auth-secret,配置共享密鑰(可在配置文件配置static-auth-secret字段來配置共享密鑰)或者通過turnadmin工具添加共享密鑰方式或者通過web-admin網頁設置臨時憑證的共享密鑰,最終這個密鑰會保存在數據庫表turn_secret中

2.2.3 臨時憑證原理

臨時憑證可通過REST API生成,只要按照下面的規則來生成臨時的用戶名和密碼即可安全訪問coturn服務器,coturn服務器只設置共享密碼(跟REST API用的共享密鑰要一樣)即可

圖1:webrtc客戶端獲取臨時憑證節點圖

圖2:webrtc通過REST API獲取臨時憑證后訪問coturn時序圖

2.2.3.1 用戶名生成

臨時用戶名采用與時間戳組合usercombo: 時間戳:用戶名

eg: 1742608315:test

1742608315:代表通信的過期時間,比如當前時間是1742608000,想讓此次通信315s,則時間戳為1742608000 + 315

: 分號為時間戳和用戶名的組合分割符,默認是冒號:,要是想用別的分割符,可以通過配置文件turnserver.conf配置rest-api-separator=:

test: 臨時用戶名

2.2.3.2 密碼生成

密碼的生成采用: base64(hmac(input_buffer = usercombo, key = shared-secret))

憑證的密碼生成基于 ?HMAC-SHA1 算法?,通過共享密鑰(Secret Key)動態用戶名(含時間戳)usercombo 生成一次性密碼

python代碼示例生成臨時憑證密碼代碼示例:

import time, hmac, hashlib, base64
# 配置參數
shared_secret = "123456" #共享密鑰 
user_id = "ccc"  #用戶ID# 生成時間戳
timestamp = int(time.time()) + 600
# 用時間戳+用戶ID,生成臨時用戶名
usercombo = f"{timestamp}:{user_id}"
# 生成密碼
hmac_digest = hmac.new(shared_secret.encode('utf-8'),usercombo.encode('utf-8'),hashlib.sha1).digest()
password = base64.b64encode(hmac_digest).decode('utf-8')
# 得到用戶名和密碼
print(f"username={usercombo}, password={password}")

2.2.3.3 共享密鑰安全性加強

共享密鑰(shared-secret)建議采用設置多個,保存在coturn數據庫表turn_secret里面(REST API生成也是用那一批共享密鑰(shared-secret)),REST API生成時候可隨機選擇一個共享密鑰(shared-secret)生成密碼,密碼隨著shared-secret的不同而變化,這樣可以增加黑客的破解難度。

coturn在驗證密碼時候會遍歷表中所有共享密鑰,一個一個計算,跟webrtc客戶端傳過來的密碼進行比較。

2.2.3.4 coturn驗證用戶登錄的原理

coturn驗證webrtc登錄過程其實是驗證簽名過程

1)webrtc客戶端通過REST API 拿到上面計算的password

2)webrtc客戶端內部使用MD5(user:realm:password)計算出key。然后在turn協議中使用HMAC-SHA1和key簽名自己的內容,并把簽名也附加到內容后面。

3)coturn收到了客戶端的username、realm和數據庫表中的shared-secrt實時計算出key

4)coturn使用key對客戶端傳過來的內容進行HMAC-SHA1簽名,跟客戶端的簽名進行對比,如果一樣則驗證通過(說明: webrtc內部本身沒有realm,這個realm是跟coturn登錄前握手拿到的,webrtc客戶端登錄消息提供username、收到的realm和HMAC簽名)

備注: coturn驗證客戶端登錄過程,coturn只是去數據庫拿到shared-secret列表,驗證只是驗證消息包的簽名而已,安全保證在于shared-secret,如果shared-secret泄露,整個系統就被破解,使用多個shared-secret的目的為了增加黑客碰撞猜測shared-secret的難度,但是只要一個shared-secret被破解,那么整個系統也就被破解。

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

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

相關文章

基于opencv和PaddleOCR識別身份證信息

1、安裝組件 pip install --upgrade paddlepaddle paddleocr 2、完整code import cv2 import numpy as np from paddleocr import PaddleOCR# 初始化 PaddleOCR use_angle_clsTrue, lang"ch", det_db_thresh0.1, det_db_box_thresh0.5)def preprocess_image(image…

【6】GD32 高級通信外設 CAN、USBD

高級通信外設:CAN、USBD CAN CAN簡介、主要功能與相關API回環模式收發發送特定ID的數據幀實驗CAN數據幀的接收實驗使用過濾器接收特定的數據幀 USBD USB通信簡介USBD設備固件庫架構、分層文件與庫函數說明USBD模擬鍵盤應用USBD虛擬串口應用USBD模擬U盤應用

【LLM+Code】Windsurf Agent 模式PromptTools詳細解讀

一、前言 https://windsurf.com/ https://windsurf.com/blog/why-we-built-windsurf https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools/tree/main/Windsurf 二、System Prompt 相比于cursor和claude code, windsurf的system prompt非常長&am…

安全性測試常規測試點全解析:從基礎到高級的實戰指南

引言 安全性測試是保障軟件系統免受惡意攻擊的核心環節,其目標是識別系統在設計、開發、部署過程中存在的安全漏洞。本文將圍繞12大常規安全測試點展開,結合具體測試方法、示例代碼及防范建議,幫助讀者構建完整的安全測試體系。 一、認證與授權測試 1. 認證機制測試 測試…

OpenCV 圖形API(55)顏色空間轉換-----將圖像從 RGB 色彩空間轉換為 I420 格式函數RGB2I420()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 將圖像從 RGB 色彩空間轉換為 I420 色彩空間。 該函數將輸入圖像從 RGB 色彩空間轉換為 I420。R、G 和 B 通道值的常規范圍是 0 到 255。 輸出圖…

Pycharm(十六)面向對象進階

一、繼承 概述: 實際開發中,我們發現很多類中的步分內容是相似的,或者相同的,每次寫很麻煩,針對這種情況, 我們可以把這些相似(相同的)部分抽取出來,單獨地放到1個類中&…

Codeforces Round 1020 (Div. 3)(題解ABCDEF)

A. Dr. TC 有n次翻轉,從1到n,0->1,1->0,每次統計1的數量,設cnt1是字符串1的數量,n次就是n*cnt1, 但每個1都會被翻轉一次減去一個cnt1,再統計cnt0,每個被翻轉一次,答案就是(n-1)*cnt1cnt0…

HTML字符實體和轉義字符串

HTML字符實體和轉義字符串用于處理特殊字符,確保它們在不同上下文中正確顯示或解析。以下是詳細總結: HTML字符實體(Character Entities) ?定義?:用于在HTML中表示保留字符或不可見字符,避免與HTML語法…

FreeRTOS菜鳥入門(六)·移植FreeRTOS到STM32

目錄 1. 獲取裸機工程模版 2. 下載 FreeRTOS V9.0.0 源碼 3. FreeRTOS文件夾內容簡介 3.1 FreeRTOS文件夾 3.1.1 Demo文件夾 3.1.2 License 文件夾 3.1.3 Source 文件夾 3.2 FreeRTOS-Plus 文件夾 4. 往裸機工程添加 FreeRTOS 源碼 5. 拷貝 FreeRTOSConfig…

通過 Tailwind CSS 自定義樣式 實現深色模式切換

創建vite項目或者vue-cli配置大同小異 1、當前環境 Vue.js 3.5nuxtjs/tailwindcss 6.13.1nuxt3.15.4node18 這里主要依賴是tailwindcss 因為當前項目是使用nuxt開發。 2、配置顏色模式 在assets/css下創建main.css * {padding: 0;margin: 0;box-sizing: border-box; }[dat…

PWNOS:2.0(vulnhub靶機)

文章目錄 靶機地址主機發現、端口掃描web滲透目錄探測漏洞利用權限提升 解密工具地址總結 靶機地址 https://download.vulnhub.com/pwnos/pWnOS_v2.0.7z 這里如果是windows系統直接使用vmware或者virtubox打開可以使用,如果是mac系統需再去做一個配置,比較麻煩 這里…

Gartner魔力象限(Gartner Magic Quadrant)

Gartner魔力象限(Gartner Magic Quadrant)是由全球領先的研究和咨詢公司Gartner發布的市場研究報告,廣泛應用于IT行業,尤其是在技術供應商評估中。它以圖形化的方式展示了不同技術領域中各個供應商的市場表現,幫助企業…

信創時代開發工具選擇指南:國產替代背景下的技術生態與實踐路徑

🧑 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C, C#, Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C、C#等開發語言,熟悉Java常用開…

人口老齡化丨AI健康小屋如何實現防病于未然?

隨著全球老齡化加劇,“銀發浪潮” 對醫療資源、養老護理和健康管理提出了嚴峻挑戰。 由此智紳科技應運而生,七彩喜智慧養老系統構筑居家養老安全網。 AI 健康小屋作為銀發科技的創新載體,通過智能化健康監測、精準化風險預警、便捷化醫療銜…

【金倉數據庫征文】金倉數據庫:開啟未來技術腦洞,探索數據庫無限可能

我的個人主頁 我的專欄: 人工智能領域、java-數據結構、Javase、C語言,希望能幫助到大家!!! 點贊👍收藏? 目錄 引言:數據庫進化的下一站 —— 未來科技的無限可能金倉數據庫簡介:國…

#什么是爬蟲?——從技術原理到現實應用的全面解析 VI

什么是爬蟲?——從技術原理到現實應用的全面解析 V 二十六、異構數據采集技術突破 26.1 PDF文本與表格提取 import pdfplumber import pandas as pddef extract_pdf_data(pdf_path):"""從PDF中提取文本和表格數據:param pdf_path: PDF文件路徑:return: 包含…

關于Spring Boot構建項目的相關知識

一 前端框架 1 VUE框架 1.1 簡介 Vue是一款流行的JavaScript框架,用于構建用戶界面和單頁面應用程序。它的設計初衷是為了簡化Web開發過程,使開發者能夠快速構建交互性強、響應速度快的Web應用。 1.2 優點 簡單易用&am…

PPO 強化學習機械臂 IK 訓練過程可視化利器 Tensorboard

視頻講解: PPO 強化學習機械臂 IK 訓練過程可視化利器 Tensorboard PPO 強化學習過程中,設置了verbose會顯示數據,但還是不夠直觀,這里上一個可視化利器,Tensorboard,實際上stable baselines3中已經有了這部…

UE5的 Modify Curve 藍圖節點

In Unreal Engine’s Animation Blueprints, the Modify Curve node lets you drive and alter any named Animation Curve on your character at runtime. The Apply Mode setting on that node controls how the “new” value you feed in (via the added curve‐input pin)…

【Hive入門】Hive分區與分區表完全指南:從原理到企業級實踐

引言 在大數據時代,高效管理海量數據成為企業面臨的核心挑戰。Hive作為Hadoop生態系統中最受歡迎的數據倉庫解決方案,其分區技術是優化數據查詢和管理的關鍵手段。本文將全面解析Hive分區技術的原理、實現方式及企業級最佳實踐,幫助您構建高性…