
coturn 认证配置指南静态账密与时间戳动态凭证怎么选、怎么落地【免费下载链接】coturncoturn TURN server project项目地址: https://gitcode.com/GitHub_Trending/co/coturncoturn 是 WebRTC 项目里最常用的 TURN媒体中继服务器。它内置两套认证方式一是静态账号密码的长期凭证Long-Term Credential二是时间戳 共享密钥的临时凭证REST API 模式。 掌握这两套机制你能独立完成 TURN 服务器的身份验证配置、用工具验证连通性并在认证失败时按错误原因快速定位避免 WebRTC 通话因 TURN 鉴权问题频繁中断。先定方向两种认证分别适合谁静态账密长期凭证用户名密码预先写进配置或数据库适合用户量小、基本固定的内网或私有部署。配置最简单是 coturn 的默认认证形态lt-cred-mech默认开启见 examples/etc/turnserver.conf 第 239 行附近的注释。时间戳动态凭证--use-auth-secret服务端不保存具体账号只保管一个或多个共享密钥客户端每次请求现场生成短期凭证。适合用户量大、动态签发凭证的 WebRTC 服务凭证泄露的影响面被时间窗约束。两者互斥同时启用时共享密钥模式会直接覆盖静态账密启动日志会打 CONFIG 警告。而且--use-auth-secret内部会隐式打开长期凭证机制所以只配它即可不必再写lt-cred-mech。特别提醒如果既没开认证开关、也没配任何用户coturn 会进入匿名模式——任何人都能白嫖你的中继带宽生产环境务必显式启用其中一套。最小可用配置两条路径直接抄路径一静态账密参考仓库示例 examples/scripts/longtermsecure/secure_relay.sh核心就这几项turnserver -a -r north.gov \ --userninefingers:youhavetoberealistic \ --certturn_server_cert.pem \ --pkeyturn_server_pkey.pem-a即--lt-cred-mech声明使用长期凭证机制最关键的开关--user用户:密码可重复多次账号存在内存里-rrealm认证域客户端侧必须与服务器完全一致错一个字符就鉴权失败--cert/--pkeyTLS 证书与私钥。密码本身不会在网络上明文传输但整条信令建议仍走加密通道。路径二时间戳动态凭证turnserver --use-auth-secret \ --static-auth-secretmysecretkey \ -r north.gov \ --certturn_server_cert.pem \ --pkeyturn_server_pkey.pem--static-auth-secret共享密钥。不配置时服务器会回退读取用户数据库turn_secret表里的动态密钥可由外部程序在线改值适合密钥热轮换-r同样必填参与完整性校验计算。机制拆解服务器到底验了什么两套认证的入口都收敛在 src/apps/relay/userdb.c 的get_user_key函数。静态账密客户端用HMAC-SHA1(用户名 realm 密码)推导出密钥再以 STUN 的 MESSAGE-INTEGRITY 属性值形式发回。服务器从静态账号表加锁查内存 map或数据库驱动取出密钥逐字节比对。密钥只比对结果密码本身永远不上网——这正是长期凭证名字的由来。动态凭证同一函数在use_auth_secret_with_timestamp为真时走另一条分支职责可以拆成三步解析与时效判断按分隔符默认:-C/--rest-api-separator可改从用户名里切出时间戳get_rest_api_timestamp解析失败返回 0过期前置拦截时间戳早于当前时间直接拒绝且注释明确说明这一步发生在任何 HMAC 计算之前——过期请求洪水不会消耗密钥遍历的 CPU 开销逐密钥验证遍历密钥列表静态 数据库来源计算 HMAC 并做完整性校验任一命中即放行全部失败标记为完整性不匹配。注意时间戳校验只有不能比现在旧没有未来多久内有效的窗口参数凭证的实际寿命由客户端申请的会话时长控制。怎么验证配置生效静态账密运行 examples/scripts/longtermsecure/ 下的secure_udp_client.sh/secure_tls_client.sh等脚本配套turnutils_uclient观察分配中继地址是否成功动态凭证运行 examples/scripts/restapi/ 下脚本客户端按下面公式现场生成凭证username 时间戳:用户名 password base64(HMAC-SHA1(secret, username))这里HMAC-SHA1的输入是完整用户名时间戳和分隔符都算在内写成只取用户名部分是最常见的密码计算错误。常见坑按错误原因对号入座服务器在get_user_key里给每次失败标了TURN_KEY_LOOKUP_*原因日志可对照排查时间戳过期EXPIRED服务器与签发端时钟不同步、或时间戳写在了分隔符后面先用date对齐两台机器完整性不匹配INTEGRITY_MISMATCH密钥不一致、realm 两边不一致、HMAC 输入截取了部分用户名、分隔符被自定义后两端未同步用户不存在NOT_FOUND静态模式下确认--user拼写与-a开关动态模式下确认密钥列表非空静态密钥或turn_secret表配置自相矛盾同时写了-a和--use-auth-secret或配了用户却没开-a此时会强制按长期凭证处理并打警告按提示二选一裸奔风险认证报文未加密传输生产必须搭配--cert/--pkey启用 TLS或走 DTLS。进阶方向与延伸阅读多密钥支持数据库turn_secret表可存多个密钥实现平滑轮换轮换脚本可参考 examples/scripts/restapi/shared_secret_maintainer.pl认证参数细节查 README.turnserverREST API 说明所在与 docs/Configuration.md需要带时效签发的 oAuth 凭证JWK/JWT 方式时服务端开--oauth配套工具见 src/apps/oauth/oauth.c认证逻辑想继续深挖直接读 src/apps/relay/userdb.cget_user_key与get_real_username两个函数是全部核心。【免费下载链接】coturncoturn TURN server project项目地址: https://gitcode.com/GitHub_Trending/co/coturn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考