Почему Icecast2 не хочет отдавать поток через https?

На сервере с Ubuntu 14.04 LTS установлен Icecast2 2.4.1 с поддержкой SSL. Также на этом сервере работает HTTPS сайт. Я хочу вставить на страницу HTML5-плеер, который тоже будет брать поток через SSL (иначе - ошибка смешанного контента). Сайт имеет коммерческий SSL-сертификат, Icecast — самоподписанный. Файл конфигурации Icecast:

<icecast>
<location>****</location>
<admin>admin@*************</admin>
<limits>
    <clients>1000</clients>
    <sources>2</sources>
    <threadpool>5</threadpool>
    <queue-size>524288</queue-size>
    <source-timeout>10</source-timeout>
    <burst-on-connect>0</burst-on-connect>
    <burst-size>65535</burst-size>
</limits>
<authentication>
    <source-password>*****</source-password>
    <relay-password>*****</relay-password>
    <admin-user>*****</admin-user>
    <admin-password>*****</admin-password>
</authentication>
<hostname>************</hostname> 
<listen-socket>
    <port>8000</port>
    <ssl>1</ssl>
</listen-socket>
<mount>
    <mount-name>/stream</mount-name>
    <charset>utf-8</charset>
</mount>
<mount> 
    <mount-name>/ogg</mount-name>
    <charset>utf-8</charset>
</mount>
<fileserve>1</fileserve>
<paths>
    <basedir>/usr/share/icecast2</basedir>
    <logdir>/var/log/icecast2</logdir>
    <webroot>/usr/share/icecast2/web</webroot>
    <adminroot>/usr/share/icecast2/admin</adminroot>
    <alias source="/" dest="/status.xsl"/>
    <ssl-certificate>/etc/icecast2/icecast2.pem</ssl-certificate>
</paths>
<logging>
    <accesslog>access.log</accesslog>
    <errorlog>error.log</errorlog>
    <loglevel>4</loglevel>
</logging>
<security>
    <chroot>0</chroot>
    <changeowner>
        <user>icecast2</user>
        <group>icecast</group>
    </changeowner>
</security>
</icecast>

Сертификат для Icecast (/etc/icecast2/icecast2.pem), созданный:

openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout icecast2.pem -out icecast2.pem

Я ожидаю получить выходной поток с адресов https://domain.name:8000/stream https://domain.name:8000/ogg для вставки в плеер через тег audio, а в ответ - тишина . При этом с адресами с простым http все работает нормально. Не понял в чем все таки ошибка... Заранее спасибо за помощь!


person Alexander    schedule 14.05.2015    source источник
comment
Вы объединили сертификат && ключ?   -  person austin    schedule 14.03.2020


Ответы (4)


Недавно я столкнулся с этой проблемой, и у меня не было много времени, чтобы решить ее, и я не видел много документации для этого. Я предполагаю, что это не самая широко используемая конфигурация icecast, поэтому я просто проксировал свой с помощью nginx, и он отлично работает.

Вот пример nginx vhost. Обязательно смените домен, проверьте свои пути и подумайте о месте, куда вы хотите проксировать монтирование, и о том, как вы хотите обрабатывать порты.

Обратите внимание, что это сделает ваш поток доступным через порт 443 вместо 8000. Некоторые клиенты (такие как facebookexternalhit/1.1) могут пытаться зависнуть в потоке, думая, что это URL-адрес https, ожидающий подключения. Это может быть не то поведение, которое вы ожидаете или желаете.

Кроме того, если вы вообще не хотите, чтобы http был доступен, обязательно измените адрес привязки обратно на локальный хост. например:

 <bind-address>127.0.0.1</bind-address>

www.example.com.nginx.conf

server {
  listen 80;
  server_name www.example.com;
  location /listen {
    if ($ssl_protocol = "") {
      rewrite ^   https://$server_name$request_uri? permanent;
    }
  }
}

#### SSL

server {
  ssl on;
  ssl_certificate_key /etc/sslmate/www.example.com.key;
  ssl_certificate /etc/sslmate/www.example.com.chained.crt;

  # Recommended security settings from https://wiki.mozilla.org/Security/Server_Side_TLS
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:
ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA
-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES2
56-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
  ssl_prefer_server_ciphers on;
  ssl_dhparam /usr/share/sslmate/dhparams/dh2048-group14.pem;
  ssl_session_timeout 5m;
  ssl_session_cache shared:SSL:5m;

  # Enable this if you want HSTS (recommended)
  add_header Strict-Transport-Security max-age=15768000;
  listen 443 ssl;
  server_name www.example.com;

  location / {
    proxy_pass         http://127.0.0.1:8000/;
    proxy_redirect     off;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  }

}
person Warren Stevens    schedule 16.07.2015
comment
Это сработало для меня после того, как я слишком много часов пытался найти решение для Icecast. Спасибо Уоррен! Я использовал слегка измененный блок местоположения из digitalocean.com/community/tutorials/ - person ryanrain; 26.06.2017
comment
На данный момент это лучшее решение, которое я смог найти для включения SSL в Icecast 2. Я использовал пакет certbot-nginx для создания сертификата. Затем мне просто нужно было изменить блок местоположения в конфигурации nginx, чтобы включить прокси. Спасибо. - person Mateng; 13.05.2020

icecast, предоставляемый для версий на основе Debian, не обеспечивает поддержку https, поскольку он поддерживается библиотеками openssl, у которых есть проблемы с лицензированием GPL.

чтобы узнать, был ли openssl скомпилирован с помощью:

ldd /usr/bin/icecast2 | grep ssl

если он скомпилирован, то должна отображаться такая строка:

libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007ff5248a4000)

иначе ничего...

чтобы получить правильную версию, их следует получить напрямую с xiph.org: .org/Icecast_Server/Installing_latest_version_(official_Xiph_repositories)

person philippe lhardy    schedule 08.09.2020

В вашем файле icecast2.xml

Если установлено значение 1, включится HTTPS на этом прослушиваемом сокете. Для этого Icecast должен быть скомпилирован с OpenSSL.

<paths>
    <basedir>./</basedir>
    <logdir>./logs</logdir>
    <pidfile>./icecast.pid</pidfile>
    <webroot>./web</webroot>
    <adminroot>./admin</adminroot>
    <allow-ip>/path/to/ip_allowlist</allow-ip>
    <deny-ip>/path_to_ip_denylist</deny-ip>
    <tls-certificate>/path/to/certificate.pem</tls-certificate>
    <ssl-allowed-ciphers>ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS</ssl-allowed-ciphers>
    <alias source="/foo" dest="/bar"/>
</paths>

<listen-socket>
    <port>8000</port>
    <bind-address>127.0.0.1</bind-address> </listen-socket>

<listen-socket>
    <port>8443</port>
    <tls>1</tls> </listen-socket>

<listen-socket>
    <port>8004</port>
    <shoutcast-mount>/live.mp3</shoutcast-mount> </listen-socket>
person TheBetterJORT    schedule 02.02.2021

Ребята, проблема связана с файлом сертификата. Прежде всего, вам нужно иметь, например,

<paths>
     <ssl-certificate>/usr/share/icecast2/icecast.pem</ssl-certificate>
</paths>

и

<listen-socket>
     <port>8443</port>
     <ssl>1</ssl>
</listen-socket>

в вашей конфигурации. Но это еще не все, что вам нужно!

Если вы получите свой сертификат, например, от let's encrypt или sslforfree, у вас будет файл сертификата и файл закрытого ключа. Но для Icecast вам нужны оба файла вместе. Что вам нужно сделать: 1- Откройте закрытый ключ и скопируйте содержимое этого файла. 2- Откройте файл сертификата и вставьте содержимое вашего закрытого ключа, которое вы скопировали, в конец этого файла и сохраните его как icecast.pem.

Затем используйте этот файл, и все будет в порядке.

Спасибо человеку, который представляет его здесь: Icecast 2 и SSL

person Abbas    schedule 24.02.2021