TLS & SRTP

Sep. 27th, 2016 11:39 pm
mr_welk: (Default)
[personal profile] mr_welk
Шифруем сигнализацию астериска с помощью TLS и голосовой поток с помощью SRTP
Elastix 4.0 + Yealink T21P-E2

настройки:

1 перешить телефон на прошивку с поддержкой SRTP
2 генерим ключи:
openssl genrsa -out key.pem 2048 — создаем закрытый ключ длиной в 2048 бит
openssl req -new -key key.pem -out request.pem — создаем запрос на сертификат на основании имеющегося закрытого ключа,
(указываем ip или DNS при запросе Common Name)
openssl x509 -req -days 3650 -in request.pem -signkey key.pem -out certificate.pem — подписываем запрос и выпускаем сертификат с использованием ранее сгенерированного закрытого ключа.
Создаем директорию /etc/asterisk/key/
и копируем в нее certificate.pem и key.pem. Открываем для редактирования файл key.pem и копируем содержимое файла сертификата certificate.pem в него, то есть в key.pem будет и сертификат и закрытый ключ

3. редактируем sip.conf (в случае Elastix sip_general_custom.conf ):

allowguest=no  ; ну это понятно
language=ru   ;  это тоже понятно
tlsenable = yes  ; включаем TLS
tlsbindaddr = 0.0.0.0:5061 ; слушаем порт 5061 со всех адресов (надо ограничить своей сетью, если астериск внутри, например: 192.168.1.0/24:5061 )
tlscertfile = /etc/asterisk/keys/key.pem  ; путь к файлу сертификата и ключа
tlscafile = /etc/asterisk/keys/ca.crt ; путь к файлу сертификата центра сертификации (он же у нас сертификат сервера, переименовываем certificate.pem в ca.crt)
tlsclientmethod = tlsv1  ;  протокол подключения через TLS
tlscipher=ALL  ;  алгоритм шифрования, можно выбрать какой-то конкретный, например DES-CBC3-SHA
encryption=yes  ;  включение SRTP
tlsdontverifyserver=yes  ;   не проверять сертификат сервера со стороны клиента (не все телефоны поддерживают проверку)

дописываем в /etc/hosts dns имя и/или IP-адрес который вводили в сертификате в качестве Common Name если его там нет

после редактирования не забываем рестартануть астериск
service asterisk restart

4 проверяем что астериск слушает порт 5061
lsof -i -n -P | grep asterisk

5 пробуем подключиться
openssl s_client -host 127.0.0.1 -port 5061

если выдает содержимое сертификата, всё ОК

6 в свойствах экстеншена на астериске выбираем порт 5061 и имя протокола TLS
там же  Encryption = YES(SRTP Only)

или в sip.conf (sip_additional.conf) дописываем к экстеншену:

[1000]
...
port=5061
transport=tls
encryption=yes
...

7 в настройках телефона (Yealink T21 E2)
настраиваем аккаунт, выбираем порт 5061 и TLS
в расширенных настройках аккаунта включаем encryption(SRTP) (если пункта нет, значит перешиваем прошивкой с американского сайта)
далее "Безопасность - доверенные сертификаты" загружаем туда наш key.pem
опция "Принимать только доверенные сертификаты" на "включено"

после регистрации телефона смотрим в консоли астериска
sip show peer 1000

должны присутствовать строчки:

...
Prim.Transp. : TLS
Allowed.Trsp : TLS
Reg. Contact : sip:1000@192.168.1.14:11885;transport=TLS   (порт будет любой)
Encryption   : Yes
...

всё, шифрование работает, для проверки можно снять дамп wireshark'ом и убедиться что SIP запросы и пакеты нечитаемые


Ссылки:

прошивки yealink с поддержкой srtp
ещё ссылки:

Profile

mr_welk: (Default)
mr_welk

February 2017

S M T W T F S
   1234
567891011
12 13141516 1718
19202122232425
262728    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 23rd, 2017 06:19 pm
Powered by Dreamwidth Studios