WebRTC服务器Coturn服务器用户管理和安全性
1、概述
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被破解,那么整个系统也就被破解。
相关文章:

WebRTC服务器Coturn服务器用户管理和安全性
1、概述 Coturn服务器对用户管理和安全方面也做了很多的措施,以下会介绍到用户方面的设置 1.1、相关术语 1.1.1 realm 在 coturn 服务器中,域(realm)是一种逻辑上的分组概念,用于对不同的用户群体、应用或者服务进行区…...

如何使用极狐GitLab 的外部状态检查功能?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 外部状态检查 (ULTIMATE ALL) pending 状态引入于极狐GitLab 16.5 pending 状态检查的超时时间为两分钟引入于极狐GitLab 16…...
如何在 Element UI 中优雅地使用 `this.$loading` 显示和隐藏加载动画
如何在 Element UI 中优雅地使用 this.$loading 显示和隐藏加载动画 在现代 Web 应用开发中,用户体验至关重要。当执行耗时操作(如网络请求或数据处理)时,显示一个友好的加载动画可以让用户知道系统正在工作,而不是卡…...
大模型微调 - 自注意力机制
一.什么是自注意力机制 注意力机制(Attention Mechanism)是一种能够根据输入的相关性动态分配权重的机制,广泛应用于自然语言处理、计算机视觉等领域。其核心思想是:“让模型在处理当前元素时,关注与其最相关的其他部…...
TDengine 集群高可用方案设计(二)
四、TDengine 集群高可用方案设计 4.1 硬件与网络架构设计 服务器选型:选择配置高、稳定性强的服务器,如戴尔 PowerEdge R740xd、华为 RH2288H V5 等。以戴尔 PowerEdge R740xd 为例,它配备英特尔至强可扩展处理器,具备高性能计…...

【Langchain】RAG 优化:提高语义完整性、向量相关性、召回率--从字符分割到语义分块 (SemanticChunker)
RAG 优化:提高语义完整性、向量相关性、召回率–从字符分割到语义分块 (SemanticChunker) 背景:提升 RAG 检索质量 在构建基于知识库的问答系统(RAG)时,如何有效地将原始文档分割成合适的文本块(Chunks&a…...

深入剖析扣子智能体的工作流与实战案例
前面我们已经初步带大家体验过扣子工作流,工作流程是 Coze 最为强大的功能之一,它如同扣子中蕴含的奇妙魔法工具,赋予我们的机器人处理极其复杂问题逻辑的能力。 这篇文章会带你更加深入地去理解并运用工作流解决实际问题 目录 一、工作流…...
C++----模拟实现string
模拟实现string,首先我们要知道成员变量有哪些: class _string{private:char* _str;size_t capacity;//空间有多大size_t size;//有效字符多少const static size_t npos;};const size_t _string::npos-1;//static在外面定义不需要带static,np…...
CodeMeter Runtime 安装失败排查与解决指南
CodeMeter Runtime 是威步提供的核心运行服务组件,用于加密授权的识别与管理。如果安装过程中出现异常或中断,常见原因包括系统冲突程序、数字签名校验失败、安全软件干扰或权限不足。 以下为推荐的完整排查步骤: 1. 检查并清理冲突程序或驱动…...

基于K8s日志审计实现攻击行为检测
K8s日志审计以一种事件溯源的方式完整记录了所有API Server的交互请求。当K8s集群遭受入侵时,安全管理员可以通过审计日志进行攻击溯源,通过分析攻击痕迹,找到攻击者的入侵行为并还原攻击者的攻击路径,修复安全问题。 在本篇文章中…...

【Linux网络编程】应用层协议HTTP(实现一个简单的http服务)
目录 前言 一,HTTP协议 1,认识URL 2,urlencode和urldecode 3,HTTP协议请求与响应格式 二,myhttp服务器端代码的编写 HTTP请求报文示例 HTTP应答报文示例 代码编写 网络通信模块 处理请求和发送应答模块 结…...

短视频+直播商城系统源码全解析:音视频流、商品组件逻辑剖析
时下,无论是依托私域流量运营的品牌方,还是追求用户粘性与转化率的内容创作者,搭建一套完整的短视频直播商城系统源码,已成为提升用户体验、增加商业变现能力的关键。本文将围绕三大核心模块——音视频流技术架构、商品组件设计、…...

STM32定时器---基本定时器
目录 一、定时器的概述 二、时基单元 三、基本定时器的的时序 (1)预分频器时序 (2)计数器时序 四、基本定时器的使用 一、定时器的概述 在没有定时器的时候,我们想要延时往往都是写一个Delay函数,里面…...
mysql快速在不同库中执行相同的sql
目录 背景 解决方案 方式一:利用变量拼接好sql,复制出来执行(简单,推荐) 方式二:使用存储过程和游标实现(比较复杂,脚本需要拼接一个完整的,也比较麻烦,不…...

大模型微调 - transformer架构
什么是Transformer Transformer 架构是由 Vaswani 等人在 2017 年提出的一种深度学习模型架构,首次发表于论文《Attention is All You Need》中 Transformer 的结构 Transformer 编码器(Encoder) 解码器(Decoder) …...
【器件专题1——IGBT第1讲】IGBT:电力电子领域的 “万能开关”,如何撑起新能源时代?
一、IGBT 是什么?重新认识这个 “低调的电力心脏” 你可能没听过 IGBT,但一定用过它驱动的设备:家里的变频空调、路上的电动汽车、屋顶的光伏逆变器,甚至高铁和电网的核心部件里,都藏着这个 “电力电子开关的瑞士军刀”…...
文件IO(Java)
注:此博文为本人学习过程中的笔记 1.概念 狭义上的文件是指保存在硬盘上的文件,广义上指操作系统进行资源管理的一种机制,很多软件/硬件资源都可以抽象成文件,这里我们针对的是狭义上的文件。 在硬盘里还有文件夹,这…...
常见缓存淘汰算法(LRU、LFU、FIFO)的区别与实现
一、前言 缓存淘汰算法主要用于在内存资源有限的情况下,优化缓存空间的使用效率。以确保缓存系统在容量不足时能够智能地选择需要移除的数据。 二、LRU(Least Recently Used) 核心思想:淘汰最久未被访问的数据。实现方式&#x…...

Sentinel数据S2_SR_HARMONIZED连续云掩膜+中位数合成
在GEE中实现时,发现简单的QA60是无法去云的,最近S2地表反射率数据集又进行了更新,原有的属性集也进行了变化,现在的SR数据集名称是“S2_SR_HARMONIZED”。那么: 要想得到研究区无云的图像,可以参考执行以下…...

HTMLCSS模板实现水滴动画效果
.container 类:定义了页面的容器样式。 display: flex:使容器成为弹性容器,方便对其子元素进行布局。justify-content: center 和 align-items: center:分别使子元素在水平和垂直方向上居中对齐。min-height: 100vh:设…...
Cesium实现地形可视域分析
Cesium实现可视化分析 一、地形可视域主要实现技术(Ray + 地形碰撞检测) Cesium 本身的 Ray 类可以用来执行非常精确的射线检测,我们可以结合地形高度(sample)来逐点检测光线是否与 terrain 相交,从而判断是否可见。 1.1 优势 实时判断每条射线是否被 terrain 遮挡地形…...
前端如何获取文件的 Hash 值?多种方式详解、对比与实践指南
文章目录 前言一、Hash 值为何重要?二、Hash 值基础知识2.1 什么是 Hash?2.2 Hash 在前端的应用场景2.3 常见的 Hash 算法(MD5、SHA 系列) 三、前端获取文件 Hash 的常用方式3.1 使用 SparkMD5 计算 MD5 值3.2 使用 Web Crypto AP…...

【数据可视化艺术·应用篇】三维管线分析如何重构城市“生命线“管理?
在智慧城市、能源管理、工业4.0等领域的快速发展中,地下管线、工业管道、电力通信网络等“城市血管”的复杂性呈指数级增长。传统二维管理模式已难以应对跨层级、多维度、动态变化的管线管理需求。三维管线分析技术应运而生,成为破解这一难题的核心工具。…...
蓝桥杯 16.对局匹配
对局匹配 原题目链接 题目描述 小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。 小明发现,网站的自动对局系统在匹配对手时,只会将积分差恰好是 K 的两名用户匹配在一起。如果两人分差小…...

【MinerU】:一款将PDF转化为机器可读格式的工具——RAG加强(Docker版本)
目录 创建容器 安装miniconda 安装mineru CPU运行 GPU加速 多卡问题 创建容器 构建Dockerfile文件 开启ssh服务,设置密码为1234等操作 # 使用官方 Ubuntu 24.04 镜像 FROM ubuntu:24.04# 安装基础工具和SSH服务 RUN apt-get update && \apt-get ins…...
DeepSeek回答过于笼统,提示词如何优化
针对DeepSeek回答过于笼统的问题,可通过以下方法优化,使输出更具体、详细: 一、优化提示词设计 明确具体要求 在提问中嵌入「背景限制示例」,例如: “作为跨境电商运营新手,请详细说明如何优化亚马逊产品标…...
C语言实现贪心算法
一、贪心算法核心思想 特征:在每一步选择中都采取当前状态下最优(局部最优)的选择,从而希望导致全局最优解 适用场景:需要满足贪心选择性质和最优子结构性质 二、经典贪心算法示例 1. 活动选择问题 目标:…...
全球碳化硅晶片市场深度解析:技术迭代、产业重构与未来赛道争夺战(2025-2031)
一、行业全景:从“材料突破”到“能源革命”的核心引擎 碳化硅(SiC)作为第三代半导体材料的代表,凭借其宽禁带(3.26eV)、高临界击穿场强(3MV/cm)、高热导率(4.9W/cmK&…...
FreeRTOS学习笔记【10】-----任务上下文切换
1 概念性内容 开机到调度需要经历的步骤有: 系统初始化任务创建启动调度器上下文切换时间分片任务执行 1.1 任务本质 FreeRTOS 的 任务(Task)本质上就是一个运行在任务自己的栈区中无限循环的函数 一段上下文(context&#x…...

Appium自动化开发环境搭建
自动化 文章目录 自动化前言 前言 Appium是一款开源工具,用于自动化iOS、Android和Windows桌面平台上的本地、移动web和混合应用程序。原生应用是指那些使用iOS、Android或Windows sdk编写的应用。移动网页应用是通过移动浏览器访问的网页应用(appum支持iOS和Chrom…...