Asterisk: Failed to create WebRTC TLS socket — исправление ошибки WSS
- В логе появляется предупреждение:
WARNING[...]: res_pjsip_transport_management.c: Failed to create WebRTC TLS socket. - Демон Asterisk не слушает защищенный порт WebSocket (WSS, порт 8089).
- Веб-клиенты возвращают ошибку
WebSocket connection to 'wss://pbx.domain.com:8089/ws' failedпри попытке регистрации. - При перезагрузке модуля pjsip транспорт WSS переходит в состояние
UNAVAILABLE.
1. Проверка валидности и прав доступа к SSL/TLS сертификатам
Убедитесь, что пользователь asterisk имеет права на чтение файлов цепочки сертификата и приватного ключа:
chown -R asterisk:asterisk /etc/asterisk/keys/
chmod 600 /etc/asterisk/keys/*.key
chmod 644 /etc/asterisk/keys/*.crt
chmod 644 /etc/asterisk/keys/*.pem2. Корректная настройка транспорта WSS в pjsip.conf
Отредактируйте файл /etc/asterisk/pjsip.conf:
[transport-wss]
type = transport
protocol = wss
bind = 0.0.0.0:8089
cert_file = /etc/asterisk/keys/fullchain.pem
priv_key_file = /etc/asterisk/keys/privkey.pem
method = tlsv1_2
require_client_cert = no
verify_client = no
verify_server = no3. Проверка занятости порта 8089 сторонними сервисами
ss -tulpn | grep 8089
# Если порт занят другим приложением, освободите его или смените bind в pjsip.conf4. Перезагрузка транспорта PJSIP
asterisk -rx "module reload res_pjsip.so"
asterisk -rx "pjsip show transports"В выводе статус транспорта transport-wss должен быть активен (Active / OK).
Частые вопросы (FAQ)
Можно ли использовать самоподписанные сертификаты для WebRTC WSS?
Технически Asterisk запустит сокет, но браузеры (Chrome, Firefox) заблокируют соединение WSS без доверенного CA сертификата, если пользователь предварительно не подтвердит исключение вручную.
Как объединить приватный ключ и цепочку Let's Encrypt для Asterisk?
В современных версиях PJSIP достаточно указать fullchain.pem в cert_file и privkey.pem в priv_key_file без необходимости объединения их в один .pem файл.
Почему сокет падает при обновлении сертификата Certbot?
Certbot сохраняет новые сертификаты с правами root. Добавьте post-renewal hook: chown -R asterisk:asterisk /etc/letsencrypt/live/ && asterisk -rx 'module reload res_pjsip.so'.
Какой протокол TLS рекомендуется указывать в pjsip.conf?
Рекомендуется указывать method = tlsv1_2 или method = default, так как устаревшие протоколы SSLv3 и TLSv1.0 блокируются большинством современных браузеров.