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.mzph.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分区技术的原理、实现方式及企业级最佳实践,帮助您构建高性…