Pull to refresh

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

Reading time3 min
Views14K
Постановка задачи. Через сайт с установленным бесплатным 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 из исходников. Однако у меня это не сработало.
Tags:
Hubs:
Total votes 6: ↑3 and ↓30
Comments8

Articles