Постановка задачи. Через сайт с установленным бесплатным 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:
# apt remove icecast2
Убеждаемся в присутствии в системе конфигурационных файлов icecast2 (опционально):
# ls -l /etc/init.d/ /etc/ | grep icecast
Устанавливаем инструменты для сборки icecast2 из исходников:
# apt install git gcc pkgconf build-essential automake autoconf libtool checkinstall
Удовлетворяем зависимости для последующей компиляции сервера icecast2:
# 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 уже инсталлировался в системе, то можно использовать уже имеющиеся):
# mkdir /var/log/icecast2
# cd /var/log/icecast2
# touch access.log
# touch error.log
Помещаем SSL-сертификат от Let`s Encrypt, переименованный в icecast.pem, в один каталог с файлами access.log и error.log и прописываем права на каталог и файлы в нем:
# chown -R icecast2:icecast /var/log/icecast2
# cd /var/log/icecast2
# 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 из исходников. Однако у меня это не сработало.
А вот Еще один способ создания шифрованного SSL потока Icecast через Nginx