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 сертификата (собственного само-подписанного доверенного сертификата).
- Конфигурация Asterisk (редактирование файла sip.conf).
- Настройка клиента для работы по TLS.
Этап номер один — ssl сертификат. Собственный доверенный сертификат (Certificate Authority) необходим для подписи клиентских сертификатов и для их проверки при авторизации клиента на Asterisk. Создаем директорию — mkdir /etc/asterisk/ssl.Для создания сертификата выполняем команду:
- openssl req -new -newkey rsa:1024 -nodes -keyout ca.key -x509 -days 500 -subj /C=RU/ST=Msk/L=Msk/O=sipring/OU=asterisk/CN=sipring.ru/ -out ca.crt
Описание аргументов:
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= info@sipring.ru
Данные сертификата, пары параметр=значение, перечисляются через ‘/’.
Описание параметров:
С — Двухсимвольный код страны (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.
- cp ca.crt asterisk.crt
- cat ca.key >> asterisk.crt
В результате получим файл само-подписанного сертификата -> asterisk.crt, используемый в конфигурации Asterisk. Далее необходимо создать клиентские сертификаты. Для этого подготовим конфигурационный файл с именем ca.config следующего содержания.
[ ca ]- default_ca = CA_CLIENT
- [ CA_CLIENT ]
- dir = ./db # Каталог для служебных файлов
- certs = $dir/certs # Каталог для сертификатов
- new_certs_dir = $dir/newcerts # Каталог для новых сертификатов
- database = $dir/index.txt # Файл с базой данных подписанных сертификатов
- serial = $dir/serial # Файл содержащий серийный номер сертификата (в шестнадцатиричном формате)
- certificate = ./ca.crt # Файл сертификата CA
- private_key = ./ca.key # Файл закрытого ключа CA
- default_days = 365 # Срок действия подписываемого сертификата
- default_crl_days = 7 # Срок действия CRL
- default_md = md5 # Алгоритм подписи
- policy = policy_anything # Название секции с описанием политики в отношении данных сертификата
- [ policy_anything ]
- countryName = optional # Код страны — не обязателен
- stateOrProvinceName = optional # ……
- localityName = optional # ……
- organizationName = optional # ……
- organizationalUnitName = optional # ……
- commonName = supplied # …… — обязателен
- emailAddress = optional # ……
И создадим структуру каталогов и файлов, соответсвующую описанной в конфигурационном файле
- # mkdir db
- # mkdir db/certs
- # mkdir db/newcerts
- # touch db/index.txt
- # echo «01» > db/serial
Аргументы команды для создания клиентского сертификата, полностью аналогичны аргументам использовавшимся при создании самоподписанного доверенного сертификата, но отсутсвует параметр -x509.
- openssl req -new -newkey rsa:1024 -nodes -keyout client.key -subj /C=RU/ST=Msk/L=Msk/O=Inc/OU=SIP/CN=sipring.ru/emailAddress= info@sipring.ru -out client.csr
И подпишем его с помощью доверенного сертификата.
- openssl ca -config ca.config -in client.csr -out client.crt -batch
Описание аргументов:
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.
- [general]
- tlsenable=yes
- tlscertfile=/etc/asterisk/ssl/asterisk.crt
И клиента подключаемого по TLS.
- [4507]
- transport=tls
- …
Перегружаем конфигурацию *CLI> sip reload и переходим к третьему этапу. Копируем файл сертификата, подготовленный нами на первом этапе, на машину, где запущен softphone. И запускаем установку сертификата.
Мастер импорта сертификатов выполнит все необходимые действия.
Жмем далее 🙂
И так сертификат на машине где запущен softphone установлен, можем переходить к подключению. Понятно что устройство, будь то softphone или SIP-телефон … должны поддерживать возможность регистрации по TLS. В нашем примере — это PortGo, выбираем транспорт — TLS и -> Войти.
Контролируем подключение на Asterisk, sip show tcp.
и sip show peer 4507
Видим что регистрация прошла успешно. И наша работа по организации регистрации на Asterisk по протоколу TLS, завершена.