Table des matières
Installer Icecast2 avec support SSL sur Debian
Pour ce tutoriel, on utilisera Debian Buster (10) et certbot de LetsEncrypt pour le certificat SSL.
Aussi bizarrement que cela puisse paraître, le paquet Icecast2 disponible pour Debian n'est pas compilé avec le support SSL, on ne peut donc pas l'utiliser en HTTPS. Ça n'est pas indiqué dans le détail du paquet, ni sur le site officiel d'Icecast2. Il faut remonter à la fondation Xiph, éditrice du programme Icecast, pour trouver l'info sur le wiki, dans la partie concernant son installation depuis les serveurs de la fondation plutôt que d'utiliser le paquet fourni par Debian.
Et bizzarrement aussi, il n'y a pas de paquet pour Debian 11 chez Xiph…
Il faut donc d'abord ajouter le dépôt logiciel de la fondation xiph avant d'installer Icecast2.
Installer depuis le dépôt Xiph
Pour ajouter le dépôt aux sources d'apt, executer cette commande (en root) :
sh -c "echo deb http://download.opensuse.org/repositories/multimedia:/xiph/Debian_10/ ./ >>/etc/apt/sources.list.d/icecast.list"
Puis il faut ajouter la clef de vérification pour légitimer cette nouvelle source en exécutant :
wget -qO - http://icecast.org/multimedia-obs.key | sudo apt-key add -
Enfin, on met à jour les sources, et on vérifie que le paquet sera installé à la place de celui provenant de Debian en exécutant la commande :
apt update && apt upgrade apt-cache policy icecast2
qui donne sur notre serveur de test :
icecast2: Installed: None Candidate: 2.4.4-1 Version table: 2.4.4-1 500 500 http://mirrors.online.net/debian buster/main amd64 Packages 2.4.4-1 500 500 http://download.opensuse.org/repositories/multimedia:/xiph/Debian_10 ./ Packages 100 /var/lib/dpkg/status
On voit que le paquet choisi proviendra de Debian car :
- la version du paquet est la même chez Debian et chez Xiph
- le “poids” de chaque source de dépôt est identique (500)
- le poids de chaque paquet est identique (500)
Il y a égalité, du coup c'est le premier (Debian) qui gagne.
Il faut expliquer à APT que l'on veut le paquet provenant de Xiph, et ce, indéfiniment dans le temps : on ne veut pas qu'à la prochaine mise à jour, celui de Debian écrase celui installé depuis Xiph. Pour ça, il faut utiliser l'APT Pinning : cela permet de donner + d'importance (+ de poids) à une source et/ou pour un paquet donné.
Pour expliquer à APT que l'on veut systématiquement le paquet provenant de Xiph, il faut créer un fichier dans /etc/apt/preferences.d/ : appelons-le par exemple 99icecastfromxiph. Ajouter dedans :
Package: icecast2 Pin: release o=obs://build.opensuse.org/multimedia:xiph/Debian_10 Pin-Priority: 600
La priorité (Pin-Priority) doit être supérieure à 500 donc pour prendre le dessus sur le paquet du dépôt Debian.
Le Pin: est une sorte de rédérence du dépôt. On la trouve dans les infos affichées par la commande suivante qui liste les différents dépôts actuels et leurs priorités (= poids) :
apt-cache policy
qui affiche pour notre serveur de test :
Package files: 100 /var/lib/dpkg/status release a=now 500 http://download.opensuse.org/repositories/multimedia:/xiph/Debian_10 ./ Packages release o=obs://build.opensuse.org/multimedia:xiph/Debian_10,n=Debian_10,l=multimedia:xiph,c= origin download.opensuse.org 500 http://security.debian.org/debian-security buster/updates/non-free amd64 Packages release v=10,o=Debian,a=stable,n=buster,l=Debian-Security,c=non-free,b=amd64 origin security.debian.org . . . Pinned packages: icecast2 -> 2.4.4-1 with priority 600
Désormais, nous pouvons installer Icecast2 avec la commande :
apt install icecast2
Puis se laisser guider par la configuration interactive (ce n'est pas l'objet ici de la détailler), en prenant soin de spécifier un hostname correspondant à un vrai nom de domaine ou sous-domaine, ce qui permettra de créer le certificat SSL.
Configurer
Créer un certificat SSL avec Certbot
Si Certbot n'est pas installé, il suffit de le faire :
apt install certbot
Puis, considérant que vous avez par exemple le sous-domaine streams.mondomaine.org pointant vers votre serveur, et configurer dans Apache, Nginx…, il faut créer un certificat pour ce sous-domaine de la façon suivante :
certbot certonly --webroot -w /home/userfolder/www/streams.mondomaine.org -d streams.mondomaine.org
en adaptant le path à votre situation bien entendu.
Cela créera les certificats et les clefs dans le dossier /etc/letsencrypt/live/streams.mondomaine.org.
Icecast demande à ce que le fichier de certificat qu'on lui fournit contienne à la fois la clef publique (fichier fullchain.pem) et la clef privée (fichier privkey.pem). On crée ce fichier comme suit, en le plaçant dans le dossier /usr/share/icecast2 :
cat /etc/letsencrypt/live/streams.mondomaine.org/fullchain.pem /etc/letsencrypt/live/streams.mondomaine.org/privkey.pem > /usr/share/icecast2/icecast.pem
Pour automatiser la création de ce fichier à chaque fois que Certbot renouvelle automatiquement la validité du certificat de ce sous-domaine, il faut lui expliquer quoi faire juste après l'avoir renouvellé en modifiant le fichier /etc/letsencrypt/renewal/streams.mondomaine.org.conf et en ajoutant dans la partie [renewalparams] le paramètre suivant qui concaténera les 2 clefs dans le fichier comme fait précédemment et redémarrera Icecast pour qu'il le prenne en compte :
post_hook = cat /etc/letsencrypt/live/streams.labomedia.org/fullchain.pem /etc/letsencrypt/live/streams.labomedia.org/privkey.pem > /usr/share/icecast2/icecast.pem && systemctl restart icecast2.service
Configurer Icecast2 pour le support SSL
Normalement, dans le fichier /etc/icecast2/icecast.xml, vous avez le sous-domaine configuré comme hostname :
<hostname>streams.labomedia.org</hostname>
Il faut maintenant dire à Icecast qu'on veut du SSL sur le port 8443 (le port par défaut, sans SSL est le 8000) en décommentant (ou ajoutant) la partie :
<listen-socket> <port>8443</port> <ssl>1</ssl> </listen-socket>
Et plus bas dans le fichier, dans la partie <paths>, il faut décommenter (ou ajouter) la ligne :
<ssl-certificate>/usr/share/icecast2/icecast.pem</ssl-certificate>
Et voilà. Reste à redémarrer Icecast avec la commande :
systemctl restart icecast2.service
Vous pourrez alors vous connecter à l'admin à l'adresse https://streams.mondomaine.org:8443/admin et les flux seront streamés sur les adresses https://streams.mondomaine.org:8443/nom_du_stream.