无法通过Let's Encrypt SSL/TLS连接Coturn服务器,用户凭证丢失
Coturn-4.5.1.1无法获取Android设备的用户凭证(Turns协议TCP传输)
环境配置
Coturn服务器配置(版本4.5.1.1 'dan Eider')
tls-listening-port=5349 fingerprint use-auth-secret server-name=turn.***.com realm=turn.****.com verbose cert=/etc/coturn/certs/turn.***.com.fullchain.pem pkey=/etc/coturn/certs/turn.***.com.privkey.pem dh-file=/etc/coturn/certs/ssl-dhparams.pem mobility min-port=49152 max-port=65535
Nginx配置(已排除Nginx影响,关闭后问题仍存在)
stream { ... ... error_log /var/log/nginx/str.error.log; upstream turnTls { server turn_tls_IP:5349; } map $ssl_preread_server_name $upstream { .... .... ... turn.****.com turnTls; } server { error_log /var/log/nginx/xxx.err.log; listen 443; listen [::]:443; proxy_pass $upstream; ssl_preread on; proxy_buffer_size 10m; } }
问题现象
Android设备通过以下Turns配置访问服务器时:
{ 'urls': ['turns:turn.***.com:443?transport=tcp'], 'username': $username, 'credential': $password, }
Coturn无法获取用户凭证,日志显示:
7: session 002000000000000001: closed (2nd stage), user <> realm <turn.****.com> origin <>, local ****:5349, remote ***:53712, reason: TLS/TCP socket buffer operation error (callback)
注意:日志中user <>为空,且出现TLS/TCP socket buffer操作错误
但使用Trickle ICE测试时有时能正常工作,此时Trickle ICE日志:
0.783 Done 0.782 relay 2831610 udp ***** 65082 0 | 31519 | 255 turns:turn.***.com:443?transport=tcp tls
对应的Coturn日志:
session 000000000000000025: new, realm=<turn.****.com>, username=<1674486335:user_80_156>, lifetime=600, cipher=ECDHE-RSA-AES256-GCM-SHA384, method=TLSv1.2
已尝试的解决方法(均无效)
- 禁用部分TLS协议:
no-tlsv1 no-tlsv1_1 no-tlsv1_2 no-tlsv3 ... - 将Let's Encrypt证书密钥复制到
/etc/coturn目录,设置权限为600,归属为turnserver:turnserver - 停止Nginx,直接通过443端口的TLS连接Turn服务器
- 修改Nginx配置,解密后转发到非TLS的Turn服务器3478端口:
stream { server { listen 443 ssl; ssl_certificate ... fullchain.pem; ssl_certificate_key ... privkey.pem; ssl_dhparam ... dhparam.pem; proxy_ssl off; proxy_pass turn_Ip_NoTLS:3478; } } - 在搭载
ISRG Root X1和DST Root CA X3的多款Android设备上测试
求助
寻求解决Coturn服务器无法获取Android用户凭证的问题。
内容的提问来源于stack exchange,提问作者Mohsen Haydari
相关产品推荐
相关产品推荐

