turnserver (coturn + redis) 配置ICE server 临时用户密码【实践】

背景

前端连接turn服务时一般都需要设置账号密码,由于都是在js中配置的,长期凭据相对临时用户安全性会差很多,本文通过程序生成临时的账号密码,把临时凭据设置到Redis中,turn服务验证的时候直接对比Redis中的账号密码,当Redis中key过期时,turnserver返回Unauthorized校验不通过。

本文用到docker、Redis,需要提前准备好

安装参考:Filebeat+Redis+Logstash+Elasticsearch+Kibana搭建日志采集分析系统_殷长庆的博客-CSDN博客_kibana7.17 采集通道

配置参考:

turnserver配置

coturn/turnserver.conf at master · coturn/coturn · GitHub

ice测试地址:

Trickle ICE 

配置

coturn安装

使用docker安装比较方便

docker search coturn

docker pull coturn/coturn

coturn配置

新建/home/turnserver.conf文件

cd /home

touch turnserver.conf

编辑文件内容,我的服务器是云服务器,服务商提供了公网、私网IP

# TURN server name and realm
realm=公网IP
server-name=turnserver

# Use fingerprint in TURN message
fingerprint

# IPs the TURN server listens to
listening-ip=私网IP

relay-ip=私网IP

# External IP-Address of the TURN server
external-ip=公网IP

# Main listening port
listening-port=3478

# Further ports that are open for communication
min-port=49152
max-port=65535

# Log file path
log-file=/var/log/turnserver.log

# Enable verbose logging
verbose

# Specify the user for the TURN authentification
user=test:test123

# Enable long-term credential mechanism
lt-cred-mech

redis-userdb="ip=私网IP dbname=11 password=redis_pwd connect_timeout=30"

 其中redis-userdb的配置就是让coturn链接到redis

启动coturn

docker run -d --network=host -v $(pwd)/turnserver.conf:/etc/coturn/turnserver.conf coturn/coturn

coturn 添加账户

docker exec -it 容器号 /bin/bash

### 进入容器之后执行,创建一个mytest:mytest123的账号,创建完成后可以在redis中查看到

turnadmin -a -N "host=私网IP dbname=11 password=redis_pwd" -u mytest -r 公网IP -p mytest123

测试连接

这时候可以使用test:test123连接到coturn,如果不成功需要检查IP是否配置正确,服务器组策略是否开启了3478/udp

Java生成临时用户 

临时用户在Redis中的key-value规则

key

turn/realm/{realm}/user/{username}/key

实际的样子可能是

turn/realm/xxx.xxx.xxx/user/mytest/key 

value 

md5(username + ":" + realm + ":" + password)

实际样子是32位的MD5签名

生成完成之后设置到Redis中,给key设置一个过期时间即可,注意设置的dbindex要和coturn配置的保持一致。

测试临时用户 

使用生成的临时账户登录 

你可能感兴趣的:(redis,coturn,turn)