GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo asegurar una conexión SSL con Apache en Ubuntu 18.04

La configuración de una conexión SSL (Secure Sockets Layer) le permite agregar un protocolo de cifrado asimétrico adicional al HTTP común. El protocolo SSL puede ser útil para fortalecer el sistema de autenticación de un sitio web o el intercambio de datos entre una aplicación y el servidor. En esta guía, verá cómo configurar una conexión SSL y habilitar HTTPS en Apache con Ubuntu 18.04.

Primero, conéctese a su servidor a través de una conexión SSH. Si aún no lo ha hecho, se recomienda seguir nuestra guía para conectarse de forma segura con el protocolo SSH. En caso de un servidor local, vaya al siguiente paso y abra la terminal de su servidor.

Obtención de un certificado SSL

Para establecer una conexión segura, Apache necesitará un certificado SSL que se puede obtener de una Autoridad de Certificación (CA). Por conveniencia, en este ejemplo usaremos un certificado autofirmado o autofirmado, usado solo en entornos de prueba y desarrollo. Para obtener un certificado autofirmado, consulte nuestra guía para crear un certificado SSL autofirmado.

Si está interesado en obtener un certificado SSL gratuito emitido por una Autoridad de Certificación, siga nuestra guía sobre Cómo asegurar Apache con Let's Encrypt y Ubuntu 18.04.

Nota importante:

Durante la creación del certificado, ingrese la dirección IP de su servidor o el nombre de dominio cuando se le solicite el nombre común:

Common Name (e.g. server FQDN or YOUR name) []: domain.com

Después de obtener el certificado, cree la carpeta /etc/certificate:

$ sudo mkdir /etc/certificate

Luego guarde tanto el certificado como la clave privada en él.

Configuración de los parámetros Apache SSL

Continúe configurando las directivas para la conexión segura que creará Apache. Para hacerlo, cree el archivo ssl-params.conf en el directorio disponible de conf de Apache:

$ sudo nano /etc/apache2/conf-available/ssl-params.conf

Pegue la siguiente configuración básica en el archivo recién creado:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
    
    SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    
    SSLHonorCipherOrder On
    
    
    Header always set X-Frame-Options DENY
    
    Header always set X-Content-Type-Options nosniff
    
    # Requires Apache >= 2.4
    
    SSLCompression off
    
    SSLUseStapling on
    
    SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
    
    
    # Requires Apache >= 2.4.11
    
    SSLSessionTickets Off

Luego guarde y cierre el archivo.

Cómo cambiar el host virtual

Luego, modifique la configuración SSL del Virtual Host del dominio que desea proteger con conexión SSL. En este tutorial, se usará la configuración SSL del Apache Virtual Host predeterminado, como ejemplo.

Abra la configuración de Virtual Host SSL:

$ sudo nano /etc/apache2/sites-available/default-ssl.conf

Encontrará un archivo estructurado de la siguiente manera:

<IfModule mod_ssl.c>
    
            <VirtualHost _default_:443>
    
                    ServerAdmin [email protected]
                     
    
                    DocumentRoot /var/www/html
                     
    
                    ErrorLog ${APACHE_LOG_DIR}/error.log
    
                    CustomLog ${APACHE_LOG_DIR}/access.log combined
                     
    
                    SSLEngine on
                     
    
                    SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
    
                    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
                     
    
                    <FilesMatch "\.(cgi|shtml|phtml|php)$">
    
                                    SSLOptions +StdEnvVars
    
                    </FilesMatch>
    
                    <Directory /usr/lib/cgi-bin>
    
                                    SSLOptions +StdEnvVars
    
                    </Directory>
                     
    
            </VirtualHost>
    
    </IfModule>

Configure correctamente la directiva ServerAdmin ingresando su correo electrónico y agregue la directiva ServerName seguida de su dominio o la dirección IP de su servidor.

Finalmente, cambie la ruta indicada por las directivas SSLCertificateFile y SSLCertificateKeyFile, ingresando respectivamente la ruta de su certificado y clave privada.

Obtendrá un resultado similar al siguiente:

<IfModule mod_ssl.c>
    
            <VirtualHost _default_:443>
    
                    ServerAdmin [email protected]
    
                    ServerName mydomain.com
                     
    
                    DocumentRoot /var/www/html
                     
    
                    ErrorLog ${APACHE_LOG_DIR}/error.log
    
                    CustomLog ${APACHE_LOG_DIR}/access.log combined
                     
    
                    SSLEngine on
                     
    
                    SSLCertificateFile      /etc/certificate/certificate.crt
    
                    SSLCertificateKeyFile /etc/certificate/private.key
                     
    
                    <FilesMatch "\.(cgi|shtml|phtml|php)$">
    
                                    SSLOptions +StdEnvVars
    
                    </FilesMatch>
    
                    <Directory /usr/lib/cgi-bin>
    
                                    SSLOptions +StdEnvVars
    
                    </Directory>
                     
    
            </VirtualHost>
    
    </IfModule>

Luego guarde y cierre el archivo.

Cómo configurar el Cortafuegos

En caso de que haya un firewall en su sistema, configúrelo para habilitar el tráfico HTTP y el tráfico HTTPS a su máquina.

Al usar el firewall UFW, hay disponibles algunos perfiles preinstalados para Apache. Así que veamos cómo habilitarlos.

Para verificar los perfiles disponibles instalados en el firewall UFW, ejecute este comando:

$ sudo ufw app list

Se mostrará una lista similar a la siguiente en la pantalla:

Available applications:
    
      Apache
    
      Apache Full
    
      Apache Secure
    
      OpenSSH

Para permitir el tráfico HTTP (Puerto 80) y HTTPS (Puerto 443), use el perfil "Apache Full".

Verifique la información del perfil de la siguiente manera:

$ sudo ufw app info "Apache Full"

Se mostrará la descripción del perfil de la pantalla:

Profile: Apache Full
    
    Title: Web Server (HTTP,HTTPS)
    Description: Apache v2 is the next generation of the omnipresent Apache web
    server.
    
    Ports:
    80,443/tcp

Después de verificar el perfil, habilítelo:

$ sudo ufw allow in "Apache Full"

Cómo configurar Apache

En este punto, se pueden realizar cambios en la configuración de Apache.

Habilite los módulos mod_ssl y mod_headers:

$ sudo a2enmod ssl
    
    $ sudo a2enmod headers

Habilitar la lectura de la configuración SSL creada anteriormente:

$ sudo a2enconf ssl-params

Habilite el servidor virtual SSL predeterminado:

$ sudo a2ensite default-ssl

Compruebe que no ha cometido errores de sintaxis en los archivos de configuración de Apache:

$ sudo apache2ctl configtest

Si aparece el mensaje "Syntax OK" en la pantalla, reinicie Apache:

$ sudo systemctl restart apache2

Cómo comprobar la conexión segura

Abra su navegador conectándose al dominio o dirección IP del Virtual Host que configuró, asegurándose de usar el protocolo https

https://mydomain.com

Linux
  1. Cómo proteger Nginx con Letsencrypt en Ubuntu 20.04

  2. Cómo proteger vsFTPd con SSL/TLS

  3. Cómo habilitar el protocolo HTTPS con Apache 2 en Ubuntu 20.04

  4. ¿Cómo instalar Apache en Ubuntu?

  5. Cómo asegurar Apache con Lets Encrypt en Ubuntu 18.04

Cómo instalar Drupal en un servidor Ubuntu 20.04 con Apache

Cómo instalar Apache en Ubuntu 20.04

Cómo configurar la autenticación de contraseña con Apache en Ubuntu 18.04

Cómo habilitar HTTP/2 con Apache en Ubuntu

Cómo instalar Apache Tomcat 10 en Ubuntu 20.04 con Nginx

Cómo proteger Apache con Let's Encrypt en Ubuntu 20.04