Ошибка Asterisk res_srtp.c: SRTP unprotect failed: authentication failed
- Лог Asterisk переполнен ошибками:
ERROR[...]: res_srtp.c: SRTP unprotect failed: authentication failed (Bad key/replay). - Периодическое пропадание звука, металлический голос или полное отсутствие слышимости во время защищенных вызовов.
- Резкий обрыв разговора через 10–30 секунд после установки соединения.
- Аномальный рост счетчиков отброшенных пакетов в
rtp show stats.
1. Проверка согласования DTLS-SRTP и криптографических профилей
В файле /etc/asterisk/pjsip.conf для эндпоинта убедитесь в правильной настройке параметров шифрования:
[secure_endpoint](!)
type = endpoint
media_encryption = dtls
media_encryption_optimistic = no
dtls_verify = fingerprint
dtls_cert_file = /etc/asterisk/keys/asterisk.pem
dtls_ca_file = /etc/asterisk/keys/ca.crt
dtls_setup = actpass
srtp_tag_32 = no2. Проверка работы с SDES-SRTP (для аппаратных SIP-телефонов)
Если телефон использует устаревший SDES вместо DTLS (например, Yealink, Grandstream, Cisco):
[sdes_phone]
type = endpoint
media_encryption = sdes
srtp_tag_32 = yes ; Некоторые модели требуют 32-битный тег аутентификации
inband_progress = yes3. Устранение сетевых задержек и дублирования пакетов (Replay Attack)
Ошибка часто возникает из-за межсетевых экранов, вызывающих джиттер или повторную доставку пакетов с нарушением счетчика ROC (Roll-Over Counter):
# Проверка потерь пакетов и джиттера
asterisk -rx "pjsip show channel <channel_id>"
# Анализ RTP через tcpdump
tcpdump -nnvv -i any udp portrange 10000-20000 -w /tmp/srtp_traffic.pcap4. Перезагрузка SRTP подсистемы
asterisk -rx "module reload res_srtp.so"
asterisk -rx "module reload res_pjsip.so" Частые вопросы (FAQ)
Что означает статус 'Bad key/replay' в res_srtp?
Это означает, что либо принятый RTP-пакет не прошел валидацию контрольной суммы HMAC-SHA1 из-за неверного ключа сессии, либо его Sequence Number уже был обработан ранее (сработал механизм защиты SRTP Replay Protection).
Почему ошибка часто возникает при удержании вызова (Hold/Resume)?
При отправке re-INVITE во время Hold некоторые софтфоны генерируют новые ключи SRTP, которые Asterisk не успевает своевременно инициализировать без включенного re-invite negotiation.
Как параметр srtp_tag_32 влияет на аутентификацию?
Параметр srtp_tag_32 переключает размер тега аутентификации между 80 бит (HMAC-SHA1-80) и 32 бит (HMAC-SHA1-32). Несовпадение тега на стороне клиента и сервера вызывает данную ошибку.
Помогает ли отключение media_encryption_optimistic?
Да. Опция optimistic разрешает звонки даже при падении шифрования, что приводит к попыткам расшифровать открытый RTP как SRTP, порождая шквал ошибок в логе.