четверг, 7 мая 2015 г.

Asterisk TLS+SRTP c подписанными сертификатами (заметки)

Почему не работает Linphone и многие другие клиенты SIP и постоянно вылазит ошибка в дебагах Asterisk .....са not found. ..... asterisk tcptls.c:673 handle_tcptls_connection: FILE * open failed! 


http://developer-android.unlimited-translate.org/training/articles/security-ssl.html#MissingCa
https://issues.asterisk.org/jira/browse/ASTERISK-17727

После прочтения двух данных ссылок пришла к выводу что стоит попробовать объединить все сертификаты в один pem файл. (см. ридми к патчу) Особенности работы android наводят на мысль что клиенту доходят не все сертификаты. Особенно если между вашим сертификатом и СА есть еще промежуточные серверы сертификации. Это подвердилось описанием бага на сайте Asterisk. Кстати патч я не ставила.


Настройка TLS

1. Создаем каталог где у нас будут храниться сертификаты и делаем запрос подставляя свои данные.

openssl req -new -newkey rsa:2048 -nodes -keyout asterisk.key  -subj /C=RU/ST=/L=KIEV/O=Organization/OU=asterisk/CN=example.com/emailAddress=admin@example.com/ -out asterisk.csr

2. Идем получать подписанный сертификат.
Есть два варианта бесплатных - на один год www.startssl.com;
и на три года - https://buy.wosign.com/freessl.html
В примере рассмотрим работу с трех годичным сертификатом. С учетом того что у китайцев и верификация полегче будет.
Главное при переходе по ссылке, нажать на зеленую кнопку -  а дальше уже все на более менее на родном буржуйском языке.

В течении часа после верификации, вы получите архив с сертификатами на все случаи жизни примерно такого содержимого:

for Apache.zip
for IIS.zip
for Nginx.zip
for Other Server.zip

Я воспользовалась сертификатами "for Other Server". Выгружаем сертификаты в каталог откуда их будет видеть Asterisk и переименовываем файлы как будет удобно с ними работать в дальнейшем.

Объединяем файл ключа и сертификат, плюс сертификаты центров сертификации.
cat asterisk.key > asterisk.pem
cat asterisk.crt >> asterisk.pem
cat 3_issuer.crt >> asterisk.pem
cat 2_cross.crt >> asterisk.pem
cat 1_root.crt >> asterisk.pem

3. Настройка Asterisk. 
Об этом есть масса статей, включая родное WIKI, Множество форумов. Почти везде я встречала так же генерацию сертификатов для клиентов, но мне она не понабилась. Во первых в мобильных приложениях нет возможности выбрать клиентский сертификат, а десктопные вполне хорошо себя чувствуют при ассиметричном алгоритме криптографии.

Кратко о настройках - вносим следующие изменения в SIP.conf или если у вас ELASTIX SIP_GENERAL_CUSTOM.conf

tlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscapath=/etc/pki/tls/cert
tlsclientmethod=tlsv1
tlscipher=ALL

Перезапускаем Asterisk и не забываем включать для нужных клиентов транспорт TLS и поддержку шифрования SRTP





4 комментария:

Анонимный комментирует...

Здравствуйте! Делаю по вашему склерознику, но есть проблема ((
Почему-то при sip reload выдает ошибку SSL Error asterisk.pem
Видимо что-то я делаю не так при экспорте в файл .pem
не могли бы вы сказать что именно туда экспортировали и зачем делали пункт 1.

Серты с https://buy.wosign.com/freessl.html получены, взял папку "for Other Server", как вы и говорили.

Анонимный комментирует...

Я рекомендую изучить вопрос запроса сертификатов.
Пункт 1 это генерация запроса на сертификат и закрытого ключа, запрос отправляется выдающему центру сертификации.

По поводу ошибки не скажу. Логи надо проверять.

Анонимный комментирует...

Разобрался тогда, не стал отвечать. Спасибо за статью! Сейчас они прикрыли бесплатные сертефикаты для домена. Может есть еще какое нибудь место с бесплатными сертами проверенное?

Nikita комментирует...

Есть вариант https://letsencrypt.org/, но тут обновление сертификатов раз в три месяца (90 дней). Сама не подключала. Еще прошлый не истек.