- Почему?
- Asterisk sip/tls (transport layer security)
- I. настройка во freepbx
- Ssl и freepbx
- Блог атс дизайн | все для asterisk
- Генерация csr
- Драйвер chan_pjsip
- Драйвер chan_sip
- Загрузка сертификата
- Как бесплатно получить сертификат let’s encrypt
- Конфигурация asterisk chan_pjsip
- Конфигурация asterisk chan_sip
- Практическая часть
- Траблшутинг с верификацией на сервере
- Часть 1 – tls
- Часть 2 – srtp
Почему?
😪Мы тщательно прорабатываем каждый фидбек и отвечаем по итогам анализа. Напишите, пожалуйста, как мы сможем улучшить эту статью.
Asterisk sip/tls (transport layer security)
TLS — криптографический протокол, обеспечивающий защищённую передачу данных между узлами в сети Интернет. Для Asterisk версии 1.6 – tls предоставляет возможность защищенной аутентификации. Что-бы иметь представление о проводимых подготовительных операциях, рассмотрим последовательность действий при установлении TLS-соединения:
- клиент подключается к серверу, поддерживающему TLS, и запрашивает защищенное соединение;
- клиент предоставляет список поддерживаемых алгоритмов шифрования и хеш-функций;
- сервер выбирает из списка, предоставленного клиентом, наиболее устойчивые алгоритмы, которые также поддерживаются сервером, и сообщает о своем выборе клиенту;
- сервер отправляет клиенту цифровой сертификат для собственной идентификации. Обычно цифровой сертификат содержит имя сервера, имя доверенного центра сертификации и открытый ключ сервера;
- клиент может связаться с сервером доверенного центра сертификации и подтвердить аутентичность переданного сертификата до начала передачи данных;
- для того чтобы сгенерировать сеансовый ключ для защищенного соединения, клиент шифрует случайно сгенерированную цифровую последовательность открытым ключом сервера и посылает результат на сервер. Учитывая специфику алгоритма асимметричного шифрования, используемого для установления соединения, только сервер может расшифровать полученную последовательность, используя свой закрытый ключ;
Подробнее об авторизации с помощью клиентских сертификатов – читаем на www.opennet.ru/base/sec/ssl_cert.txt.html. Произведем подключение SIP-абонента к IP PBX Asteriskпо защищенному каналу. Asterisk должен быть собран с поддержкой библиотеки openssl (до сборки asterisk – yum install openssl). Решение поставленной задачи можно разделить на три этапа.
Этап номер один – ssl сертификат. Собственный доверенный сертификат (Certificate Authority) необходим для подписи клиентских сертификатов и для их проверки при авторизации клиента на Asterisk. Создаем директорию – mkdir /etc/asterisk/ssl.Для создания сертификата выполняем команду:
Описание аргументов:
req
Запрос на создание нового сертификата.
-new
Создание запроса на сертификат (Certificate Signing Request).
-newkey rsa:1024
Автоматически будет создан новый закрытый RSA ключ длиной 1024 бита. Длину ключа можете настроить по своему усмотрению.
-nodes
Не шифровать закрытый ключ .
-keyout ca.key
Закрытый ключ сохранить в файл ca.key.
-x509
Вместо создания CSR (см. опцию -new) создать самоподписанный сертификат.
-days 500
Срок действия сертификата 500 дней. Размер периода действия можете настроить по своему усмотрению. Не рекомендуется вводить маленькие значения, так как этим сертификатом вы будете подписывать клиентские сертификаты.
-subj /C=RU/ST=Msk/L=Msk/O=sipring/OU=asterisk/CN=igor/emailAddress=
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Данные сертификата, пары параметр=значение, перечисляются через ‘/’.
Описание параметров:
С – Двухсимвольный код страны (Country). Необязательный параметр.
ST – Название региона/области/края/республики/… (State Name). Необязательный параметр.
L – Название города/поселка/… (Locality Name).Необязательный параметр.
O – Название организации (Organization Name). Необязательный параметр.
OU – Название отдела (Organization Unit). Необязательный параметр.
CN – Имя сертификата, при создании серверных сертификатов используется доменное имя сайта, для клиентских
сертификатов может быть использовано что угодно (Common Name). Обязательный параметр. Максимальная длина 64 символа.
emailAddress – почтовый адрес (E-mail address).Необязательный параметр. Максимальная длина 40 символов. Необязательные параметры могут быть пропущены.
-out ca.crt
Сертификат сохранить в файл ca.crt.
В результате выполнения команды появятся два файла ca.key и ca.crt. Подготовим файл сертификата для Asterisk.
В результате получим файл само-подписанного сертификата -> asterisk.crt, используемый в конфигурации Asterisk. Далее необходимо создать клиентские сертификаты. Для этого подготовим конфигурационный файл с именем ca.config следующего содержания.
И создадим структуру каталогов и файлов, соответсвующую описанной в конфигурационном файле
Аргументы команды для создания клиентского сертификата, полностью аналогичны аргументам использовавшимся при создании самоподписанного доверенного сертификата, но отсутсвует параметр -x509.
И подпишем его с помощью доверенного сертификата.
Описание аргументов:
ca
Подпись запроса с помощью CA.
-config ca.config
Использовать конфигурационный файл ca.config.
-in client.csr
CSR находится в файле client.csr
-out client.crt
Сохранить сертификат в файл client.crt
-batch
Не спрашивать подтверждения подписи.
В результате выполнения команды появится файл клиентского сертификата – client.crt. И так – можем переходить ко второй части – конфигурация Asterisk. Изучим документацию Asterisk SIP/TLS Transport. На самом деле, необходимо внести просто – пару строк в файл sip.conf, в раздел -general.
И клиента подключаемого по TLS.
Перегружаем конфигурацию *CLI> sip reload и переходим к третьему этапу. Копируем файл сертификата, подготовленный нами на первом этапе, на машину, где запущен softphone. И запускаем установку сертификата.

Мастер импорта сертификатов выполнит все необходимые действия.

Жмем далее 🙂

И так сертификат на машине где запущен softphone установлен, можем переходить к подключению. Понятно что устройство, будь то softphone или SIP-телефон … должны поддерживать возможность регистрации по TLS. В нашем примере – это PortGo, выбираем транспорт – TLS и -> Войти.

Контролируем подключение на Asterisk, sip show tcp.

и sip show peer 4507

Видим что регистрация прошла успешно. И наша работа по организации регистрации на Asterisk по протоколу TLS, завершена.

обсудить на форуме >>
I. настройка во freepbx
По умолчанию UDP-порты для FreePBX 13 – chan_sip@5061, chan_pjsip@5060. Изменим их на chan_sip@5060 и chan_pjsip@5062 перед началом настройки УАТС. Вы можете выбрать любые другие порты и сделать их по умолчанию.
В настройках SIP Asterisk «General SIP Settings» нужно выбрать какой порт назначен и для какой технологии. Выбрав Chan SIP по умолчанию, SIP будет использовать порт TLS 5061, а pjSIP будет использовать порт TLS 5161.
Ssl и freepbx
Сертификат SSL позволяет вашему FreePBX иметь уникальную цифровую подпись, с помощью которой, каждый раз при обращении к интерфейсу будет создаваться защищенное соединение между web – сервером и клиентским устройством. SSL сертификат включает в себя информацию о его владельце и открытый ключ.
Помимо этого, сертификат позволяет совершать звонки по защищенному транспортному протоколу TLS и шифровать голосовые потоки через SRTP.
Блог атс дизайн | все для asterisk
Некоторые пользователи желают последнюю версию Asterisk. Они хотят быстрого исправления ошибок в релизах, и не хотят возиться с применением патчей.
Если Вы этот тип администратора сервера, то вы получите исправление не только своих ошибок, но и исправления, которые были найдены у других пользователей в месячный срок.
А некоторые пользователи проводят тестирование самостоятельно. Они не хотят видеть исправления чужих пользователей, так как это может привнести в систему другие “баги”. Они желают лишь исправления своих найденных ошибок и ничего более…
Некоторые пользователи хотят дополнительных функций, и при этом не меняя версии Asterisk.
Это, конечно, идет вразрез с политикой Digium не добавлять новые функции без изменения основной версии, но например появление новых Digium телефонов вынудило разработчика добавить их поддержку в последние релизы Asterisk 1.8 и 10.
Для решения всех этих различных потребностей, Digium приготовили нечто, что удовлетворит большинство людей. Как первую группу пользователей (много исправлений, частые релизы), вторую (минимальные изменения), так и третью группу (дополнительные функции).
Digium представляет: “Сертифицированный Asterisk».
Сертифицированный Asterisk является веткой Asterisk, для которых компания Digium обеспечивает гарантированную поддержку SLA.
Релизы в этой ветке будут выпускаться не часто – от двух до четырех в год, а не 10-12 как в основном направлении Asterisk.
Ошибки будут исправлены лишь те, которые были получены от SLA клиентов.
Это отвечает на требования многих наших клиентов, которые хотят свести к минимуму установку больших или частых обновлений кода.
Сертифицированный Asterisk не является продуктом с закрытым исходным кодом. Это GPLv2 код, как и у любой другой ветки, выпуска или версии Asterisk. Он может свободно использоваться любым желающим.
Digium выбирает релиз 1.8.11, проводит строгий контроль качества для SLA клиентов, и выводит новый продукт 1.8.11-cert1. Если какой либо из клиентов сообщит в будущем об ошибках, то Digium выпустит исправление с номером 1.8.11-cert2 , и так далее…
Компания собирается через 3-4 месяца перейти на 1.8.15, и начнет нумерацию с единицы (1.8.15-cert1)
Сертифицированные релизы будут основаны только на LTS релизах. И более подробно о выпусках различных версий, Вы можете отследить по таблице:

Генерация csr
Приступаем к получению сертификата. Центр сертификации попросит вас предоставить сгенерированный CSR файл (Certificate Signing Request). Это является обязательной частью подачи заявления на сертификат, и содержит в себе различные данные об организации, такие как наименование, полное имя домена, код страны и прочие.
Драйвер chan_pjsip
Выберите сертификат для использования. Сертификаты устанавливаются в модуле “Certificate Manager” на вашей УАТС.
Установите «Метод SSL» (“SSL Method”) для использования «sslv2»
Установите «Проверять клиента» (“Verify Client”) и “Проверять сервер” (“Verify Server”) на «Да» (“Yes”).
Измените “Транспорт” (“Transport”), “Шифрование мультимедиа” (“Media Encryption”) и “Требовать шифрование RTP (Media)” (“Require RTP (Media) Encryption”) как показано на рисунке ниже.
Если телефон уже настроен в EPM, переустановите конфигурацию для SIP-аккаунта, на котором вы будете использовать SRTP или TLS, на основе настроек, которые вы произвели, и перезагрузите телефоны. После перезагрузки телефоны будут использовать SRTP и TLS.
Драйвер chan_sip
После того, как будут выполнены предварительные настройки, мы включим TLS/SSL/SRTP в настройках “Asterisk SIP Settings” (Далее мы рассмотрим как настроить шифрование, используя драйвер pjSIP).
Установите «Включить TLS» (“Enable TLS”) на «Да» (“Yes”)
Выберите сертификат для использования. Сертификаты устанавливаются в модуле “Certificate Manager” на вашей УАТС.
Установите «Метод SSL» (“SSL Method”) для использования «sslv2»
Установите «Не проверять сервер» (“Don’t Verify Server”) на «Нет» (“No”). (Это кажется немного противоречивым, но мы хотим проверить как это будет работать).
Измените расширения, которые вы хотите включить TLS/SRTP, на вкладке расширений включите TLS и SRTP, как показано в примере ниже.
Загрузка сертификата
После того, как мы получили сертификат от сертификационного центра (CA), его необходимо загрузить на сервер. Нажимаем на кнопку New Certificate и выбираем Upload Certificate
- Name – имя для сертификата
- Description – описание сертификата. Используется только внутри модуля и не влияет на импорт сертификата.
- Passphrase – кодовая фраза, то есть пароль. Необходима для доступа к сертификату и генерации сертификатов на стороне клиента. Если вы не укажете пароль в данном поле, то вам придется указывать его каждый раз, когда потребуется новый сертификат. К тому же, отсутствие пароля приводит к незащищенности приватного ключа сертификата.
- CSR Reference – в данном поле выберите сгенерированный CSR файл на предыдущем этапе.
- Поле Certificate – откройте файл сертификата, который вам предоставил сертификационный центр и полностью копируйте его в это поле, начиная от тэга «—–BEGIN CERTIFICATE—–» до «—–END CERTIFICATE—–»
- Поле Trusted Chain – порой, центр сертификации (CA), помимо самого сертификата может предоставить вам целый набор файлов. Они называется Trusted Chain, то есть цепочки доверия. Последовательно откройте каждый из файлов и скопируйте их содержимое в это поле.
По окончанию настроек нажмите Generate Certificate. По окончанию настроек вы сможете увидеть ваш сертификат в общем списке. В процессе эксплуатации он доступен для редактирования:
Как бесплатно получить сертификат let’s encrypt
Мы можем бесплатно получить сертификат SSL, прибегнув к помощи центра сертификации
Let’s Encrypt. Для этого не потребуется настраивать какие-либо сторонние модули. Все необходимое для выполнения этой процедуры уже содержит интерфейс FreePBX.
Конфигурация asterisk chan_pjsip
Теперь давайте настроим драйвер PJSIP канала Asterisk для использования TLS.
В файле конфигурации /etc/asterisk/pjsip.conf вам необходимо включить транспорт с поддержкой TLS. Примером может быть следующим:
[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 method=tlsv1
Обратите внимание на protocol, cert_file, priv_key_file и method. Здесь мы используем протокол TLS, мы указываем ключи, которые мы сгенерировали ранее для cert_file и priv_key_file, и установили метод TLSv1.
Затем необходимо указать SIP-клиенту использование протокола TLS. Пример ниже:
Конфигурация asterisk chan_sip
В файле конфигурации /etc/asterisk/sip.conf установите следующее:
tlsenable=yes tlsbindaddr=0.0.0.0 tlscertfile=/etc/asterisk/keys/asterisk.pem tlscafile=/etc/asterisk/keys/ca.crt tlscipher=ALL tlsclientmethod=tlsv1
Здесь мы активируем поддержку TLS.
Мы привязываем TLS к нашему локальному IPv4 (по умолчанию для порта TLS – 5061) адресу.
Мы установили файл сертификата TLS тот, который мы создали выше.
Мы установили Центр сертификации тот, который мы создали выше.
Шифры TLS установлены на ВСЕ, поскольку это наиболее подходящий вариант.
И мы установили SIP-метод аутентификации TLS в TLSv1, так как это предпочтительнее для RFC и для большинства SIP-клиентов.
Затем вам нужно настроить SIP-аккаунт в Asterisk для использования TLS в качестве транспортного протокола. Вот пример:
[maksim] type=peer secret=mypassword host=dynamic context=local dtmfmode=rfc2833 disallow=all allow=g722 transport=tls
Обратите внимание на вариант transport. Драйвер канала Asterisk SIP поддерживает три типа: udp, tcp и tls. Поскольку мы настраиваем TLS, мы его и установим. Также можно указать несколько поддерживаемых типов транспорта для партнера, разделив их запятыми.
Практическая часть
apt-get install libsrtp0-dev
Траблшутинг с верификацией на сервере
Если хост или IP-адрес, используемые для общего имени в вашем сертификате, не совпадают с вашим сервером, тогда вы можете столкнуться с проблемами, когда ваш клиент делает вызов через Asterisk. Убедитесь, что у клиента настроено – не проверять сервер на соответствие сертификату.
При вызове из Asterisk через софтфон вы можете столкнуться с ERROR в CLI Asterisk, подобным этому:
Часть 1 – tls
Создание ключей безопасностиСоздадим директория хранения ключей безопасности
mkdir /etc/asterisk/keys
Затем, используя скрипт “ast_tls_cert” из исходного каталога “contrib/scripts” в Asterisk, создадим самоподписной центр сертификации (Certificate Authority) и сертификат для Asterisk.
Часть 2 – srtp
Теперь, когда мы включили TLS, наша сигнализация безопасна, поэтому больше никто не узнает, какие расширения используются нами на PBX. Но наши вызовы по-прежнему не защищены, поэтому кто-то может отследить наши разговоры RTP. Давайте это исправим.
Поддержка SRTP обеспечивается libsrtp. libsrtp должен быть установлен на сервере до компиляции Asterisk, иначе вы увидите что-то вроде:
[Jan 24 09:29:16] ERROR[10167]: chan_sip.c:27987 setup_srtp: No SRTP module loaded, can't setup SRTP session.
на вашем CLI Asterisk. Если вы это видите, установите libsrtp (это для тех, кто читает статью с конца), а затем переустановите Asterisk (./configure; make; make install).
Давайте вернемся к нашим pee настройкам в sip.conf. Добавляем строку шифрования:
[maksim] type=peer secret=mypassword host=dynamic context=local dtmfmode=rfc2833 disallow=all allow=g722 transport=tls encryption=yes context=local
На этом все.
