SIP TLS SRTP Asterisk

asterisk-sip-tls-srtp-mobile Настройка защищенного соединения TLS SRTP между двумя серверами Asterisk и для SIP клиентов, с использованием драйвера chan_sip.

см. также Asterisk настройка TLS SRTP для PJSIP

Создание ключей и сертификатов

Создайте директорию для ключей:

  mkdir /etc/asterisk/keys

В директории ../contrib/scripts/ исходных файлов Asterisk находится скрипт ast_tls_cert для генерации ключей:

  cd  /usr/src/asterisk-13*/contrib/scripts/

Сгенерируем сертификаты сервера:

  ./ast_tls_cert -C pbx.asterisk-pbx.ru -O "asterisk-pbx.ru" -d /etc/asterisk/keys
  • -C - domain или IP адрес
  • -O - наименование
  • -d - путь к созданной выше директории для ключей (/etc/asterisk/keys)

ast_tls_cert operation

ast_tls_cert operation

No config file specified, creating '/etc/asterisk/keys/tmp.cfg'
You can use this config file to create additional certs without
re-entering the information for the fields in the certificate
Creating CA key /etc/asterisk/keys/ca.key
Generating RSA private key, 4096 bit long modulus
..++
........................................................................................................................++
e is 65537 (0x10001)
Enter pass phrase for /etc/asterisk/keys/ca.key:
Verifying - Enter pass phrase for /etc/asterisk/keys/ca.key:
Creating CA certificate /etc/asterisk/keys/ca.crt
Enter pass phrase for /etc/asterisk/keys/ca.key:
Creating certificate /etc/asterisk/keys/asterisk.key
Generating RSA private key, 1024 bit long modulus
.++++++
.........++++++
e is 65537 (0x10001)
Creating signing request /etc/asterisk/keys/asterisk.csr
Creating certificate /etc/asterisk/keys/asterisk.crt
Signature ok
subject=/CN=pbx.asterisk-pbx.ru/O=asterisk-pbx.ru
Getting CA Private Key
Enter pass phrase for /etc/asterisk/keys/ca.key:
Combining key and crt into /etc/asterisk/keys/asterisk.pem

В ходе этой операции вам будет предложено задать ключевое слово (pass phrase) Задайте пароль и повторите его ввод еще два раза, при запросах скрипта.

Asterisk SRTP

Asterisk поддерживает TLS «из коробки» дополнительных действий, кроме настройки в секции [general] файла sip.conf, не требуется. Для поддержки SRTP Asterisk должен быть скомпилирован соответствующим образом.
Должны быть установлены зависимости, библиотеки srtp:

 yum install  libsrtp libsrtp-devel

Конфигурация должна быть выполнена с ключами:

   --with-crypto --with-ssl=ssl --with-srtp

Загрузите модуль srtp:

*CLI> module load res_srtp.so
Loaded res_srtp.so
 Loaded res_srtp.so => (Secure RTP (SRTP))
*CLI> module show like srtp
Module                         Description                              Use Count  Status      Support Level
res_srtp.so                    Secure RTP (SRTP)                        0          Running              core
1 modules loaded

В файле modules.conf включите загрузку модуля, если требуется:

 load = res_srtp.so
asterisk1

Сконфигурируем настройки general драйвера chan_sip для использования транспорта TLS.
etc/asterisk/sip.conf

[general]
tcpenable=yes
bindaddr=0.0.0.0
tlsenable=yes
tlsbindaddr=0.0.0.0:5061
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscafile=/etc/asterisk/keys/ca.crt
tlscipher=ALL
tlsclientmethod=tlsv1
tlsdontverifyserver=yes

В нашем примере для TLS используется порт 5061, этот порт должен отличаться от порта TCP, например:

 asterisk -rx 'sip show settings' | grep -C 2 "UDP Bindaddress"
Global Settings:
----------------
  UDP Bindaddress:        0.0.0.0:6665
  TCP SIP Bindaddress:    0.0.0.0:6666
  TLS SIP Bindaddress:    0.0.0.0:6667

Зарегистрируемся по протоколу TLS на удаленном сервере Asterisk:

[general]
register => tls://SIPTRUNK:PASSWORD@asterisk2:5061

Настроим SIP транк:

[trunk_to_asterisk2]
type=friend
context=from-astrisk2
host=asterisk2
port=5066
secret=PASSWORD
dtmfmode=rfc2833
disallow=all
allow=alaw
fromdomain=asterisk2
insecure=port,invite
qualify=yes
canreinvite=no
encryption=yes
transport=tls

Настройки транка типовые, кроме опций:

  • encryption=yes
  • transport=tls

Настройки SIP аккаунтов, тоже совершенно обычные, кроме transport=tls и encryption=yes

[mobile](!)
host=dynamic
type=friend
context=from-mobile
qualify=yes
qualifyfreq=60
canreinvite=no
directmedia=nonat
nat=force_rport,comedia
transport=tls
encryption=yes
disallow=all
allow=ulaw
allow=alaw
directrtpsetup=nonat

[1234](mobile)
defaultuser=1234
callerid= "user1234" <1234>
secret=password

[1235](mobile)
defaultuser=1235
callerid="user1235" <1235>
secret=password

примените настройки:

*CLI> sip reload
 Reloading SIP
  == Parsing '/etc/asterisk/sip.conf': Found
  == Using SIP TOS bits 96
  == Using SIP CoS mark 4
  == TLS/SSL ECDH initialized (automatic), faster PFS ciphers enabled
  == TLS/SSL certificate ok

Обратите внимание на вывод TLS/SSL..

Второй сервер должен быть скомпилирован с поддержкой SRTP соответственно.
Скопируйте ключи в директорию /etc/asterisk второго сервера:

    scp /etc/asterisk/keys asterisk2:/etc/asterisk
 password:

где asterisk2 хост или ip адрес второго сервера.

asterisk2
[general]
tcpenable=yes
bindaddr=0.0.0.0
tlsenable=yes
tlsbindaddr=0.0.0.0:5066
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscafile=/etc/asterisk/keys/ca.crt
tlscipher=ALL
tlsclientmethod=tlsv1
tlsdontverifyserver=yes
[trunk_to_asterisk1]
type=friend
context=from-asterisk1
host=asterisk1
port=5061
secret=PASSWORD
dtmfmode=rfc2833
disallow=all
allow=alaw
fromdomain=asterisk1
insecure=port,invite
qualify=yes
canreinvite=no
encryption=yes
transport=tls

Теперь останется только настроить маршрутизацию и зарегистрировать SIP клиентов. Дополнительные сведения о настройке TLS SRTP в Asterisk вы может найти в материале см. также Asterisk настройка TLS SRTP для PJSIP

Тестирование

Хорошо бы еще убедиться, что сигнализация и голос зашифрованы. Это можно сделать при помощи приложения tcpdump

для сигнализации:

  tcpdump -nqt -s 0 -A -vvv -i eth0 port 5061

где eth0 сетевой интерфейс.

Для голоса:

  tcpdump -nqt -s 0 -A -vvv -i eth0 portrange 10000-20000

Нажмите, чтобы отобразить

Нажмите, чтобы скрыть

IP (tos 0x20, ttl 48, id 41706, offset 0, flags [DF], proto UDP (17), length 100)
    176.57.4.1.41674 > 192.168.0.253.10026: [udp sum ok] UDP, length 72
E .d..@.0.[..;........'*.P;g.k...Nf.....{.5Ph.8_~v..P..L.r......y*.j...]..61...../.y...|u.^_5..h....
IP (tos 0x0, ttl 64, id 63106, offset 0, flags [DF], proto UDP (17), length 200)
    192.168.0.253.10062 > 192.168.0.231.19736: [udp sum ok] UDP, length 172
E.....@.@..l........'NM....f.....9.H....W...WV...VQ...QV...VW...WWU..UWW...WV...WW...WT...WT...WW...TT...TU....TTU..TTT.UTVT.TUVTT.TPPW.TVV....U........................U...TTTUVQQSVSR]RQR]_PPS]RWPWQVT

Как настроить Zoiper на Android по протоколу TLS SRTP.

Только авторизованные участники могут оставлять комментарии.

Войти через: Google Facebook