[toc] # Apache2 y certificado SSL autofirmado <p style="text-align: justify;"> Vamos a configurar Apache2 con un certificado SSL autofirmado para el dominio email.ccuellar.test. Esto permitirá que tu servidor web funcione con HTTPS sin depender de un proveedor externo. ## Crear el directorio del sitio y el archivo index.html Crea el directorio para el sitio web y define un archivo index.html personalizado: sudo mkdir -p /var/www/html/email.ccuellar.test sudo vi /var/www/html/email.ccuellar.test/index.html Añade el siguiente contenido al archivo: <!DOCTYPE html> <html> <head> <title>Bienvenido a email.ccuellar.test</title> </head> <body> <center><h1>Hola Este es el sitio de email.ccuellar.test!</h1></center> </body> </html> Asigna los permisos correctos: sudo chown -R www-data:www-data /var/www/html/email.ccuellar.test sudo chmod -R 755 /var/www/html ## Configurar el VirtualHost para HTTP (puerto 80) Crea el archivo de configuración para el sitio: sudo vi /etc/apache2/sites-available/email.ccuellar.test.conf Añade la siguiente configuración: <VirtualHost *:80> ServerAdmin root@ccuellar.test ServerName email.ccuellar.test DocumentRoot /var/www/html/email.ccuellar.test ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/html/email.ccuellar.test> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost> Verifica la sintaxis de la configuración: sudo apache2ctl configtest <p style="text-align: justify;"> Si recibes un mensaje sobre el nombre del servidor, edita el archivo global de Apache: sudo vi /etc/apache2/apache2.conf Añade esta línea al final: ServerName email.ccuellar.test Guarda el archivo y vuelve a verificar la sintaxis: sudo apache2ctl configtest <p style="text-align: justify;"> Habilita el sitio y deshabilita el sitio por defecto (si existe): sudo a2dissite 000-default.conf sudo a2ensite email.ccuellar.test.conf sudo a2enmod rewrite Reinicia Apache2 para aplicar los cambios: ## Generar un certificado SSL autofirmado ### Crear la clave privada y el certificado Genera una clave privada sin contraseña: sudo openssl genpkey -algorithm RSA -out /etc/ssl/private/email.ccuellar.test.key Genera el certificado autofirmado: sudo openssl req -x509 -new -nodes -key /etc/ssl/private/email.ccuellar.test.key \ -sha256 -days 365 -out /etc/ssl/certs/email.ccuellar.test.crt <p style="text-align: justify;"> Durante este proceso, se te pedirá ingresar información como el Common Name (FQDN) . Usa <strong>email.ccuellar.test</strong> ## Configurar el VirtualHost para HTTPS (puerto 443) Edita el archivo de configuración existente: sudo vi /etc/apache2/sites-available/email.ccuellar.test.conf Añade la configuración para HTTPS al final del archivo: <VirtualHost *:80> ServerName email.ccuellar.test Redirect permanent / https://email.ccuellar.test/ </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin root@ccuellar.test ServerName email.ccuellar.test DocumentRoot /var/www/html/email.ccuellar.test ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/email.ccuellar.test.crt SSLCertificateKeyFile /etc/ssl/private/email.ccuellar.test.key Protocols h2 http/1.1 <Directory /var/www/html/email.ccuellar.test> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost> </IfModule> ## Habilitar los módulos necesarios Habilita los módulos para SSL y HTTP/2: sudo a2enmod ssl sudo a2enmod http2 Verifica la sintaxis de la configuración: sudo apache2ctl configtest Reinicia Apache2: sudo systemctl restart apache2 ## Verificar que todo funciona ### Verificar redirección HTTP → HTTPS <p style="text-align: justify;"> Usa curl para comprobar que las solicitudes HTTP se redirigen correctamente a HTTPS: curl -I http://email.ccuellar.test <p style="text-align: justify;"> Deberías ver una respuesta con un código 301 Moved Permanently hacia https://email.ccuellar.test. ### Verificar HTTPS curl -I https://email.ccuellar.test Nos mostrará un mensaje: curl: (60) SSL certificate problem: self-signed certificate More details here: https://curl.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above. <p style="text-align: justify;"> El error SSL certificate problem: self-signed certificate indica que curl no puede verificar la legitimidad del certificado porque no está firmado por una CA confiable. Esto es esperable en entornos de desarrollo o pruebas donde usamos certificados autofirmados. ### Solución #### Agregar el certificado al almacén de confianza del sistema <p style="text-align: justify;"> Para evitar este error en herramientas como curl, navegadores web u otros clientes, puedes agregar el certificado autofirmado al almacén de confianza del sistema. Aquí están los pasos: ##### Copiar el certificado al almacén de CA del sistema <p style="text-align: justify;"> Copia el certificado autofirmado (email.ccuellar.test.crt) al directorio de certificados del sistema: sudo cp /etc/ssl/certs/email.ccuellar.test.crt /usr/local/share/ca-certificates/ ##### Actualizar el almacén de certificados <p style="text-align: justify;"> Actualiza el almacén de certificados del sistema para que reconozca el nuevo certificado: sudo update-ca-certificates <p style="text-align: justify;"> Esto agregará el certificado al almacén de confianza del sistema y permitirá que herramientas como curl y navegadores web confíen en él. ##### Verificar nuevamente con curl curl -I https://email.ccuellar.test ##### Verificar el certificado Usa OpenSSL para inspeccionar el certificado: openssl s_client -connect email.ccuellar.test:443 -servername email.ccuellar.test ## Notas importantes * Certificado autofirmado : Los navegadores no confiarán automáticamente en este certificado porque no está firmado por una CA reconocida. Para entornos de producción, considera usar Let's Encrypt o una CA comercial. * Seguridad : Asegúrate de proteger adecuadamente los archivos de clave privada (/etc/ssl/private/email.ccuellar.test.key) y el certificado (/etc/ssl/certs/email.ccuellar.test.crt). 🤗 --- ## [Índice de secciones aquí](https://hackmd.io/@ccuellar/rJ73y6FpJe) ## [👈Anterior sección](https://hackmd.io/@ccuellar/SkfRjrwake) 😄 [Siguiente sección 👉](https://hackmd.io/@ccuellar/ryMRcAFT1g)