En esta guía, explico cómo habilitar HTTPS en Icecast y cómo generar certificados SSL de forma gratuita a través de Lets Encrypt.
Cada vez es más importante suministrar su audio a través de HTTPS. Con Chrome 80, lanzado en enero, Chrome intenta actualizar automáticamente las solicitudes de medios HTTP a HTTPS . Si el servidor no proporciona medios HTTPS, la solicitud fallará.
Esta guía asume que está ejecutando Ubuntu 18.04 o más reciente. Las versiones anteriores pueden funcionar, pero hay muchos problemas relacionados con las dependencias de los paquetes.
Algunas guías en línea le muestran cómo colocar Nginx o Apache frente a Icecast para la terminación de SSL, pero eso no es necesario. Ubuntu / Debian no proporciona una versión de Icecast con el soporte HTTPS habilitado ( debido a algunos problemas de licencia ), pero Xiph (la base detrás de Icecast) proporciona repositorios con una versión prediseñada de Icecast con soporte SSL
Incluso si ya tiene los paquetes Debian / Ubuntu de Icecast ya instalados en su sistema, es fácil actualizar usando el mismo proceso que se detalla a continuación.
Instalación de Icecast con soporte HTTPS
En su servidor, agregue el repositorio de paquetes Xiph a su lista de fuentes de apt:
sudo sh -c "echo deb http://download.opensuse.org/repositories/multimedia:/xiph/xUbuntu_18.10/ ./ >> / etc / apt / sources.list.d / icecast.list"
Descargue la clave de firma y agréguela a apt:
wget -qO - http://icecast.org/multimedia-obs.key | sudo apt-key add -
Nota: en el momento de escribir este artículo, la clave proporcionada en el comando anterior ha caducado. En su lugar, puede usar este comando para descargar el más nuevo de OpenSUSE directamente:
wget -qO - https://build.opensuse.org/projects/multimedia:libs/public_key | sudo apt-key add -
Actualice la caché de paquetes:
apt-get update
Ahora, puede instalar o actualizar Icecast:
apt-get install icecast2
En este punto, es posible que deba configurar Icecast. Si se trata de una nueva instalación, vaya a mi guía de configuración para obtener instrucciones detalladas . Si se trata de una instalación existente, Icecast debería seguir ejecutándose con su configuración actual. Asegúrate de probar esto ahora.
Instalación y ejecución de Lets Encrypt Certbot para Icecast
Ahora, podemos comenzar a instalar y ejecutar las herramientas necesarias para generar un certificado SSL. Esta sección asume que su servidor puede estar ubicado en ‘stream.example.com’.
Para que funcione la validación del certificado SSL, deberá tener configurado el DNS y apuntar a este servidor. Icecast ya debe estar ejecutándose en el puerto 80. Estoy usando el dominio ‘stream.example.com’ en esta guía; asegúrese de cambiar las rutas por las suyas.
apt-get install certbot
Ejecute certbot con el dominio correcto para su servidor:
sudo mkdir -p /var/www/html/.well-known/acme-challenge
echo "Contenido del archivo de verificación" | sudo tee /var/www/html/.well-known/acme-challenge/GlWu4s7IrYYH7wc1QGQn1_A8Cf6u6hn6nF9TBVOXVN0
echo "Contenido del archivo de verificación" | sudo tee /var/www/html/.well-known/acme-challenge/GlWu4s7IrYYH7wc1QGQn1_A8Cf6u6hn6nF9TBVOXVN0
curl -i http://envivo.top/.well-known/acme-challenge/GlWu4s7IrYYH7wc1QGQn1_A8Cf6u6hn6nF9TBVOXVN0
certbot certonly --webroot-path = "/ usr / share / icecast2 / web" -d 'stream.example.com'
Para crear la ruta .well-known/acme-challenge
en Apache2 y asegurarte de que los archivos dentro de esta ruta sean servidos correctamente para la verificación de certificados ACME, sigue estos pasos:
- Crear el Directorio en tu Sitio Web:Abre una terminal y ejecuta los siguientes comandos para crear el directorio
.well-known/acme-challenge
en la raíz de tu sitio web:bashCopy codesudo mkdir -p /var/www/html/.well-known/acme-challenge
Esto creará la estructura de directorios necesaria para la ruta.well-known/acme-challenge
en la ubicación estándar de archivos web. - Asegurarte de que los Archivos sean Accesibles:Asegúrate de que los archivos dentro del directorio
.well-known/acme-challenge
sean accesibles públicamente. Esto generalmente significa que el servidor web debe tener permisos para leer los archivos. - Colocar el Archivo de Verificación:Coloca el archivo de verificación
GlWu4s7IrYYH7wc1QGQn1_A8Cf6u6hn6nF9TBVOXVN0
dentro del directorioacme-challenge
.Puedes usar el comandoecho
para crear el archivo. Por ejemplo:bashCopy codeecho "Contenido del archivo de verificación" | sudo tee /var/www/html/.well-known/acme-challenge/GlWu4s7IrYYH7wc1QGQn1_A8Cf6u6hn6nF9TBVOXVN0
Reemplaza"Contenido del archivo de verificación"
con el contenido real del archivo que proporciona el sistema de verificación ACME. - Verificar la Accesibilidad:Usa un navegador web o el comando
curl
para asegurarte de que los archivos dentro de la ruta.well-known/acme-challenge
sean accesibles públicamente:bashCopy codecurl -i http://envivo.top/.well-known/acme-challenge/GlWu4s7IrYYH7wc1QGQn1_A8Cf6u6hn6nF9TBVOXVN0
Asegúrate de que el servidor devuelva un código de respuesta 200 (OK) y que el contenido del archivo sea visible en la respuesta. - Verificar el Certificado con Certbot:Luego de confirmar que los archivos son accesibles, puedes ejecutar el comando Certbot para verificar el certificado. Por ejemplo:bashCopy code
certbot certonly --webroot-path="/var/www/html" -d 'envivo.top'
Esto le indicará a Certbot que use la ruta/var/www/html
como el directorio raíz web y realizará la verificación.
Siguiendo estos pasos, deberías poder crear y acceder a la ruta .well-known/acme-challenge
en tu servidor Apache2 para la verificación de certificados.
¡Felicitaciones! Has obtenido con éxito tu certificado SSL utilizando Certbot. La salida que proporcionaste muestra que el proceso de obtención del certificado ha sido exitoso. Aquí tienes algunas observaciones clave de la salida:
- Seleccionaste el plugin
webroot
para la autenticación y el instaladorNone
, lo que indica que el certificado fue obtenido pero no se instaló automáticamente en ningún servidor web. - Certbot utilizó el desafío
http-01
para verificar tu dominioenvivo.top
y utilizó la ruta/var/www/html
como el directorio webroot para realizar la verificación. - El certificado y la cadena se guardaron en
/etc/letsencrypt/live/envivo.top/fullchain.pem
, y la clave privada se guardó en/etc/letsencrypt/live/envivo.top/privkey.pem
. - La salida también proporciona información sobre la fecha de vencimiento del certificado y cómo obtener un nuevo certificado en el futuro.
- Se mencionan enlaces para considerar donar a Let’s Encrypt y EFF, las organizaciones detrás de Certbot y el proyecto Let’s Encrypt.
Para concatenar los archivos de certificado y crear un archivo en el formato correcto para que Icecast los use, sigue estos pasos:
- Abrir una Terminal: Abre una terminal en tu sistema.
- Navegar a la Carpeta de Certificados: Asegúrate de estar en la ubicación donde se encuentran los archivos de certificado y clave privada que obtuviste con Certbot. Por lo general, estos archivos están en
/etc/letsencrypt/live/envivo.top/
. - Concatenar los Archivos: Utiliza el comando
cat
para concatenar los archivos de certificado (fullchain.pem
) y la clave privada (privkey.pem
) en un solo archivo, que llamaremosbundle.pem
:bashCopy codecat fullchain.pem privkey.pem > bundle.pem
Este comando toma el contenido defullchain.pem
y luego agrega el contenido deprivkey.pem
, creando un nuevo archivobundle.pem
que contiene ambos. - Verificar el Archivo Resultante: Puedes verificar que el archivo
bundle.pem
se haya creado correctamente usando el comandols
:bashCopy codels -l bundle.pem
Esto te mostrará información sobre el archivobundle.pem
y su tamaño.
El archivo bundle.pem
que has creado ahora contiene tanto el certificado como la clave privada concatenados en el formato necesario para que Icecast los utilice. Puedes usar este archivo para configurar Icecast y habilitar el soporte SSL/TLS. Recuerda configurar Icecast para que utilice este archivo en su configuración.
Puedes copiar el archivo bundle.pem
a la ruta /etc/icecast2/
utilizando el comando sudo cp
. Aquí está cómo hacerlo:
- Abrir una Terminal: Abre una terminal en tu sistema.
- Ejecutar el Comando de Copia: Ejecuta el siguiente comando para copiar el archivo
bundle.pem
a la ruta/etc/icecast2/
. Asegúrate de reemplazarruta_del_archivo
con la ruta completa hacia el archivobundle.pem
:bashCopy codesudo cp ruta_del_archivo/bundle.pem /etc/icecast2/
Por ejemplo, si el archivobundle.pem
está en la carpeta/ruta/del/archivo/
, el comando se vería así:bashCopy codesudo cp /ruta/del/archivo/bundle.pem /etc/icecast2/
- Verificar la Copia: Para verificar que el archivo se copió correctamente, puedes listar los archivos en la carpeta
/etc/icecast2/
usando el comandols
:bashCopy codels -l /etc/icecast2/
Esto mostrará los archivos en esa carpeta, incluido elbundle.pem
que acabas de copiar.
El archivo bundle.pem
ahora debería estar en la carpeta /etc/icecast2/
, y podrás utilizarlo en la configuración de Icecast para habilitar el soporte SSL/TLS
Cuando se le solicite, seleccione la opción ‘webroot’ e ingrese su dirección de correo electrónico. Su certificado debe generarse en este punto. Si recibe errores, anótelos y comience a investigar un poco en línea. El error más común es la imposibilidad de validar; en este caso, asegúrese de que se pueda acceder a Icecast a través de DNS en el puerto 80 y verifique que su webfoot sea realmente ‘/ usr / share / icecast2 / web’.
Ahora necesitamos concatenar dos archivos de certificado para que estén en el formato correcto para que los use Icecast:
cat /etc/letsencrypt/live/stream.example.com/fullchain.pem /etc/letsencrypt/live/stream1.example.com/privkey.pem> /etc/icecast2/bundle.pem chmod 666 /etc/icecast2/bundle.pem
Si sabe con qué usuario se está ejecutando Icecast, puede ejecutar un chown en lugar de un chmod. Icecast necesita poder leer este nuevo archivo PEM, ese es el objetivo aquí.
Mientras lo pensamos, también debemos asegurarnos de que las renovaciones de certificados se ejecuten correctamente. Abra el archivo de configuración del certificado en un editor de texto:
nano /etc/letsencrypt/renewal/envivo.top.conf
Agregue esta línea a la sección [renewalparams] :
post_hook = sh -c "cat /etc/letsencrypt/live/stream.example.com/fullchain.pem /etc/letsencrypt/live/stream.example.com/privkey.pem > /etc/icecast2/bundle.pem && systemctl restart icecast2" Corregido: post_hook = sh -c "cat /etc/letsencrypt/live/envivo.top/fullchain.pem /etc/letsencrypt/live/envivo.top/privkey.pem > /etc/icecast2/bundle.pem && systemctl restart icecast2"
Puedes validar el proceso de renovación para asegurarte de que funciona correctamente:
certbot renovar --dry-run
Configurar Icecast para SSL
Ahora estamos listos para terminar con esto y hacer que Icecast funcione con nuestro nuevo certificado.
Edite Icecast.xml en un editor de texto:
nano /etc/icecast2/icecast.xml
Agregue esta línea a la sección <paths> </paths>:
<ssl-certificate> /etc/icecast2/bundle.pem </ssl-certificate>
Ahora, agregue esta sección al documento (en el nodo XML raíz):
<escucha-socket> <port> 443 </port> <ssl> 1 </ssl> </listen-socket>
Salga del editor de texto y ahora reinicie Icecast:
reinicio del servicio sudo icecast2
Si todo va bien, ahora puede navegar a httsp: //stream.example.com/ y también escuchar sus transmisiones de Internet a través de HTTPS.
Opcional: validación de DNS
Si utiliza una configuración de operación por turnos de Icecast, es posible que prefiera utilizar la validación del certificado DNS en lugar de la validación HTTP. Esto permitirá que cada servidor obtenga un certificado para un dominio.
Para hacer esto, necesita instalar un complemento de DNS para su proveedor. Los proveedores admitidos incluyen AWS Route53 y otros .
La instalación del complemento Route53 en su servidor es fácil:
apt-get install python3-certbot-dns-route53
Deberá crear un nuevo usuario en IAM con permisos en su zona DNS. Esto se hace a través de la consola de AWS IAM. Aquí hay una política de ejemplo:
{ "Versión": "2012-10-17", "Declaración": [ { "Sid": "VisualEditor0", "Efecto": "Permitir", "Acción": [ "route53: ListHostedZones", "route53: GetChange" ], "Recurso": "*" }, { "Sid": "VisualEditor1", "Efecto": "Permitir", "Acción": [ "route53: GetHostedZone", "route53: ChangeResourceRecordSets", "route53: ListResourceRecordSets" ], "Recurso": "arn: aws: route53 ::: zona hospedada / ABCDEF" } ] }
Deberá instalar la AWS CLI en su servidor. Cuando se le solicite, inserte las credenciales de AWS IAM que se le proporcionaron a través de la Consola de AWS.
curl "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" descomprime awscliv2.zip ./aws/install aws configure
Al solicitar inicialmente el certificado a través de certbot, su comando se vería así:
certbot certonly
–dns-route53
-d ‘stream.example.com’