Установка сервера icecast2 с поддержкой SSL для трансляции по https-протоколу

Постановка задачи. Через сайт с установленным бесплатным SSL-сертификатом от Let`s Encrypt размещен осуществляется аудиотрансляция из локальной сети организации. Однако, в интернет-браузере при посещении страницы сайта появляется предупреждение о наличии смешанного контента, так как трансляция идет по незащищенному протоколу http. Требуется устранить смешанный контент. Для этого было решено организовать аудиотрансляцию по защищенному протоколу https посредством Icecast2 и IceS2.

Итогом долгих поисков решения этой задачи стала установка сервера Icecast2 с поддержкой SSL при использовании бесплатного сертификата от Let`s Encrypt. Несмотря на то, что разработчиками сервера Icecast2 заявлена поддержка SSL, необходимо выполнить компиляцию сервера из исходного кода. Здесь описана процедура компиляции и установки сервера Icecast2 с использованием сертификата от OpenSSL. Однако, на данный момент браузеры ругаются на сертификаты, сгенерированные посредством openssl. Поэтому вместо сертификата OpenSSL используем бесплатный сертификат от Let`s Encrypt, сгенерированный на доменное имя, привязанное к внешнему IP-адресу, с которого идет трансляция в сеть.

Все нижеописанные операции выполнялись на дистрибутиве Linux Mint.


Итак, сначала обновляем систему и устанавливаем Icecast2 самым обычным образом с тем, чтобы его тут же удалить. Это нужно для того, чтобы облегчить себе задачу конфигурирования сервера Icecast2.

Удаляем icecast2:

sudo apt remove icecast2

Убеждаемся в присутствии в системе конфигурационных файлов icecast2 (опционально):

ls -l /etc/init.d/ /etc/ | grep icecast

Устанавливаем инструменты для сборки icecast2 из исходников:

sudo apt install git gcc build-essential automake autoconf libtool checkinstall

Удовлетворяем зависимости для последующей компиляции сервера icecast2:

sudo apt install libcurl4-openssl-dev libxslt1-dev libxml2-dev libogg-dev libvorbis-dev libflac-dev libtheora-dev libssl-dev libspeex-dev

Создаем каталог для размещения временных файлов — исходников:

mkdir src
cd src

Клонируем последний релиз icecast2:

git clone --recursive https://git.xiph.org/icecast-server.git

Создаем конфигурационный скрипт:

cd icecast-server; ./autogen.sh

Выполняем конфигурацию исходного кода для поддержки SSL:

./configure --with-curl --with-openssl

Убеждаемся, что поддержка SSL в конфигурации присутствует (наличие lssl):

grep lssl config.status

Компилируем:

make

Инсталлируем icecast2:

sudo checkinstall

В процессе отработки команды утилита checkinstall попросит нас добавить описание пакета. Также обязательно указываем версию пакета, иначе команда выдаст ошибку «версия пакета не начинается с цифры».

Далее создаем файлы access.log и error.log (если icecast2 уже инсталлировался в системе, то можно использовать уже имеющиеся):

sudo mkdir /var/log/icecast2
cd /var/log/icecast2
sudo touch access.log
sudo touch error.log

Помещаем SSL-сертификат от Let`s Encrypt, переименованный в icecast.pem, в один каталог с файлами access.log и error.log и прописываем права на каталог и файлы в нем:

sudo chown -R icecast2:icecast /var/log/icecast2
cd /var/log/icecast2
sudo chmod -R 777 *

Редактируем файл icecast.xml из каталога /usr/local/etc/ (наверное можно использовать уже имеющийся файл), корректируя путь до каталогов с файлами access.log и error.log, а также сертификата icecast.pem. (Для создания последнего нужно скопировать содержимое файлов fullchain.pem и privkey.pem из каталога /etc/letsencrypt/live/имя_домена, открыв их текстовым редактором, в один файл и сохранить его под именем icecast.pem.) Необходимо убедиться, что в файле icecast.xml прописаны два порта: один для http-соединения (8000), другой для защищенного https-соединения (8443). Строки с указанием пути к SSL-сертификату и указанием https-порта необходимо раскомментировать. В файле вместо ssl может быть прописано tls — разницы я не увидел.

Следует пояснить, что через http-порт 8000 идет соединение с IceS2 или подобным приложением, осуществляющим считывание аудиоданных и их передачу серверу Icecast2. При его отсутствии вся эта конструкция работать не будет. Данная ошибка встречается на просторах интернета очень часто.

Запускаем сервер icecast2:

/usr/local/bin/icecast -c /usr/local/etc/icecast.xml

Смотрим файл error.log и убеждаемся, что icecast2 увидел и скушал наш сертификат. Открываем в интернет-браузере порты 8000 и 8443 и снова убеждаемся, что всё работает.

Настраиваем автоматический запуск icecast2 при загрузке операционной системы через сервис «Параметры» — «Автозагрузка», прописывая туда команду на запуск из предыдущего пункта.

Здесь заявлено решение данной задачи с SSL-сертификатом от Let`s Encrypt без компиляции Icecast2 из исходников. Однако у меня это не сработало.
Share post

Similar posts

Comments 7

    +4
    На sudo make install понимаешь, что и так довольно бесполезная статья, становится вредной…
    И запускать всё это конечно предлагается ручками? =)

    На самом же деле, свежий icecast с поддержкой ssl ставится из внешнего репозитория, и в дальнейшем успешно обновляется, имеет скрипт(unit) для запуска и.т.п.
    wiki.xiph.org/Icecast_Server/Installing_latest_version_(official_Xiph_repositories)
      0
      На sudo make install понимаешь, что и так довольно бесполезная статья, становится вредной…

      Описан принцип, а пользователи дистрибутивов пусть используют инструкции к своему пакетному менеджеру, как собирать пакеты. Ну в самом деле, не расписывать же каждый раз в каждой статье, как сделать пакеты на популярные дистрибутивы.
        0
        При таком подходе, надо просто вообще опустить этот момент, а не учить заведомо плохому. Или написать, как делается для каокго-нибудь вашего дистрибутива, но правильно.
        0
        Попробовал установить icecast2 из внешнего репозитория. Результат: No SSL capability. Почему при заявленной поддержке SSL ее по факту нет — не понимаю. Пришлось вернуться к описанному мною в статье варианту.
        +3
        Но можно же перед Icecast2 поставить nginx с ssl, терминировать на нем ssl и уже проксировать на Icecast2. Либо заменить nginx на haproxy, в этом случае можно сделать переключение на резервный бэк, в случае падения основного сервера вещания.
          0
          Благодарю за конструктивную критику и предложенные варианты решения задачи, которые обязательно попробую.
            0
            Откорректировал статью, заменив make install на более безопасный checkinstall.

            Only users with full accounts can post comments. Log in, please.