Развертывание шифрования звонков SIP TLS и SRTP в Asterisk (Yealink, Grandstream, Fanvil)
- Ошибки регистрации телефонов:
SSL_ERROR_SSL / Certificate verify failed. - Односторонняя слышимость или сброс вызова сразу после ответа при включенном
media_encryption=sdes. - В дампе sngrep сигнальные пакеты отображаются в открытом виде вместо защищенного TCP/TLS потока (порт 5061).
1. Генерация SSL/TLS сертификатов для Asterisk
Создайте самоподписанный CA и серверный сертификат с помощью скрипта ast_tls_cert:
mkdir /etc/asterisk/keys
cd /usr/src/asterisk/contrib/scripts || cd /usr/share/asterisk/scripts
./ast_tls_cert -C pbx.itstm.ru -O "ITSTM PBX" -d /etc/asterisk/keys
chown -R asterisk:asterisk /etc/asterisk/keys
chmod 600 /etc/asterisk/keys/*2. Конфигурация TLS транспорта в /etc/asterisk/pjsip.conf
[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5061
cert_file=/etc/asterisk/keys/asterisk.crt
priv_key_file=/etc/asterisk/keys/asterisk.key
ca_list_file=/etc/asterisk/keys/ca.crt
method=tlsv1_2
require_client_cert=no
verify_client=no
verify_server=no3. Конфигурация защищенного эндпоинта (SIP-аккаунта)
[101]
type=endpoint
context=from-internal
disallow=all
allow=alaw
allow=ulaw
transport=transport-tls
media_encryption=sdes
media_encryption_optimistic=no
auth=101-auth
aors=101-aor
[101-auth]
type=auth
auth_type=userpass
username=101
password=VeryStrongPassSecure2025!
[101-aor]
type=aor
max_contacts=14. Настройка аппаратных IP-телефонов (Yealink, Grandstream, Fanvil)
- Yealink: В веб-интерфейсе Account → Register: Transport →
TLS, Port →5061. Во вкладке Advanced: SRTP →Compulsory (Обязательно). - Grandstream: В Account → SIP Settings → Basic Settings: SIP Transport →
TLS/TCP. В Audio Settings: SRTP Mode →Enabled and Forced. - Fanvil: В Line → SIP: Transport Protocol →
TLS. В Media Settings: RTP Encryption (SRTP) →Mandatory.
5. Диагностика и проверка статуса шифрования в CLI
# Проверка статуса TLS транспорта
asterisk -rx "pjsip show transports"
# Проверка медиа-шифрования активного канала
asterisk -rx "pjsip show channel <channel_id>" | grep -i encryption Частые вопросы (FAQ)
В чем разница между SIP TLS и SRTP?
SIP TLS шифрует сигнальный протокол управления вызовом (логины, пароли, набираемые номера, заголовки SIP) по порту TCP 5061. SRTP (Secure Real-time Transport Protocol) шифрует непосредственно голосовой RTP-трафик (аудиоданные).
Почему телефон отклоняет вызов при включенном verify_server=yes?
При включенной проверке сертификата телефон требует, чтобы имя хоста PBX точно совпадало с Common Name (CN) сертификата, а корневой CA-сертификат был предварительно загружен в доверенные сертификаты телефона.
Что такое media_encryption_optimistic?
Если установлено в 'yes', Asterisk попытается согласовать SRTP, но если удаленный клиент не поддерживает шифрование, вызов переключится в открытый RTP. Значение 'no' запрещает незашифрованные звонки.
Можно ли использовать бесплатные сертификаты Let's Encrypt для TLS в Asterisk?
Да. Укажите пути к /etc/letsencrypt/live/pbx.domain/fullchain.pem и privkey.pem в transport-tls, но не забывайте выполнять 'pjsip reload' после автообновления certbot.