One place for hosting & domains

      autofirmado

      Cómo crear un certificado SSL autofirmado para Apache en Ubuntu 20.04


      Introducción

      TLS, o “seguridad de capa de transporte”, y su predecesor SSL, son protocolos utilizados para envolver el tráfico normal en un envoltorio protegido y cifrado. Usando esta tecnología, los servidores pueden enviar de forma segura información a sus clientes sin que sus mensajes sean interceptados o leídos por una parte externa.

      En esta guía, le mostraremos cómo crear y usar un certificado SSL autofirmado con el servidor web Apache en Ubuntu 20.04.

      Nota: Un certificado autofirmado cifrará la comunicación entre su servidor y cualquier cliente. Sin embargo, dado que no está firmado por ninguna de las autoridades certificadoras de confianza incluidas con los navegadores web y los sistemas operativos, los usuarios no pueden usar el certificado para validar la identidad de su servidor de forma automática. Como resultado, sus usuarios verán un error de seguridad cuando visiten su sitio.

      Debido a esta limitación, los certificados autofirmados no son apropiados para un entorno de producción que sirve al público. Normalmente, se utilizan para probar o para asegurar servicios no críticos utilizados por un solo usuario o un pequeño grupo de usuarios que pueden confiar en la validez del certificado a través de canales de comunicación alternativos.

      Para obtener una solución de certificado más preparado para la producción, consulte Let’s Encrypt, una autoridad de certificado gratuita. Puede aprender a descargar y configurar un certificado Let’s Encrypt en nuestro tutorial Cómo proteger Apache con Let’s Encrypt en Ubuntu 20.04.

      Requisitos previos

      Antes de iniciar este tutorial, necesitará lo siguiente:

      • Acceso a un servidor Ubuntu 20.04 con un usuario no root sudo habilitado. Nuestra guía de configuración inicial de servidor con Ubuntu 20.04 puede mostrarle cómo crear esta cuenta.
      • También deberá tener Apache instalado. Puede instalar Apache usando apt. Primero, actualice el índice de paquetes locales de modo que se refleje cualquier cambio anterior:

      A continuación, instale el paquete apache2:

      Y, por último, si tiene un firewall ufw configurado, abra los puertos http y https:

      • sudo ufw allow "Apache Full"

      Una vez que haya completado estos pasos, asegúrese de haber iniciado sesión como usuario no root y continúe con el tutoria.

      Paso 1: Habilitar mod_ssl

      Antes de poder utilizar cualquiera de los certificados SSL,primero se debe habilitar mod_ssl, un módulo de Apache que proporciona soporte para el cifrado SSL.

      Habilite mod_ssl con el comando a2enmod:

      Reinicie Apache para activar el módulo:

      • sudo systemctl restart apache2

      Ahora está habilitado el módulo mod_ssl y listo para su uso.

      Paso 2: Crear el certificado SSL

      Ahora que Apache está listo para usar cifrado, podemos continuar y generar un nuevo certificado SSL. El certificado almacenará información básica sobre su sitio, y estará acompañado de un archivo de claves que permite al servidor manejar de forma segura datos cifrados.

      Podemos crear la clave SSL y los archivos de certificado con el comando openssl:

      • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

      Tras introducir el comando, aparecerá un mensaje donde puede introducir información sobre su sitio web. Antes de abordar eso, observemos lo que sucede en el comando que emitimos:

      • openssl: es la herramienta de línea de comandos para crear y administrar certificados, claves y otros archivos de OpenSSL.
      • req -x509: especifica que deseamos usar la administración de la solicitud de firma de certificados (CSR) X.509. El “X.509” es un estándar de infraestructura de claves públicas al que se adhieren SSL y TLS para la administración de claves y certificados.
      • -nodes: indica a OpenSSL que omita la opción para proteger nuestro certificado con una frase de contraseña. Necesitamos que Apache pueda leer el archivo, sin intervención del usuario, cuando se inicie el servidor. Una frase de contraseña evitaría que esto suceda porque tendríamos que introducirla tras cada reinicio.
      • -days 365: esta opción establece el tiempo durante el cual el certificado se considerará válido. En este caso, lo configuramos por un año. Muchos navegadores modernos rechazarán cualquier certificado válido por más de un año.
      • -newkey rsa:2048: especifica que deseamos generar un nuevo certificado y una nueva clave al mismo tiempo. No creamos la clave que se requiere para firmar el certificado en un paso anterior, por lo que debemos crearla junto con el certificado. La parte rsa:2048 le indica que cree una clave RSA de 2048 bits de extensión.
      • -keyout: esta línea indica a OpenSSL dónde colocar el archivo de clave privada generado que estamos creando.
      • -out: indica a OpenSSL dónde colocar el certificado que creamos.

      Complete las solicitudes de forma adecuada. La línea más importante es la que solicita Common Name. Debe introducir el nombre de host que utilizará para acceder al servidor o a la IP pública del servidor. Es importante que este campo coincida con lo que pondrá en la barra de direcciones de su navegador para acceder al sitio, ya que un error de concordancia causará más errores de seguridad.

      La lista completa de las instrucciones tendrá un aspecto similar a este:

      Country Name (2 letter code) [XX]:US
      State or Province Name (full name) []:Example
      Locality Name (eg, city) [Default City]:Example 
      Organization Name (eg, company) [Default Company Ltd]:Example Inc
      Organizational Unit Name (eg, section) []:Example Dept
      Common Name (eg, your name or your server's hostname) []:your_domain_or_ip
      Email Address []:webmaster@example.com
      

      Los dos archivos que creó se ubicarán en los subdirectorios correspondientes en /etc/ssl.

      A continuación, actualizaremos nuestra configuración Apache para usar el nuevo certificado y la clave.

      Paso 3: Configurar Apache para usar SSL

      Ahora que tenemos nuestro certificado y la clave autofirmados disponibles, debemos actualizar nuestra configuración Apache para usarlos. En Ubuntu, puede colocar nuevos archivos de configuración de Apache (deben terminar en .conf) en /etc/apache2/sites-available/y se cargarán la próxima vez que se vuelva a cargar o reiniciar el proceso Apache.

      Para este tutorial, crearemos un nuevo archivo de configuración mínimo. (Si ya tiene un Apache <Virtualhost> configurado y solo necesita agregarle SSL, probablemente deberá copiar las líneas de configuración que comienzan con SSL, y cambiar el puerto VirtualHost de 80 a 443. Nos encargaremos del puerto 80 en el siguiente paso).

      Abra un nuevo archivo en el directorio /etc/apache2/sites-available:

      • sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

      Pegue la siguiente configuración mínima VirtualHost:

      /etc/apache2/sites-available/your_domain_or_ip.conf

      <VirtualHost *:443>
         ServerName your_domain_or_ip
         DocumentRoot /var/www/your_domain_or_ip
      
         SSLEngine on
         SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
         SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
      </VirtualHost>
      
      

      Asegúrese de actualizar la línea ServerName a la que desea que se dirija su servidor. Puede ser un nombre de host, un nombre de dominio completo o una dirección IP. Asegúrese de que lo que elija coincida con Common Name que eligió al crear el certificado.

      Las líneas restantes especifican un directorio DocumentRoot para que sirva los archivos, y las opciones SSL necesarias para apuntar Apache a nuestro certificado y clave recién creados.

      Ahora vamos a crear nuestro DocumentRoot y ponemos un archivo HTML en él solo para fines de prueba:

      • sudo mkdir /var/www/your_domain_or_ip

      Abra un nuevo archivo index.html con su editor de texto:

      • sudo nano /var/www/your_domain_or_ip/index.html

      Pegue lo siguiente en el archivo en blanco:

      /var/www/your_domain_or_ip/index.html

      <h1>it worked!</h1>
      

      Esto no es un archivo HTML completo, por supuesto, pero los navegadores son indulgentes y bastará para verificar nuestra configuración.

      Guarde y cierre el archivo. A continuación, debemos habilitar el archivo de configuración con la herramienta a2ensite:

      • sudo a2ensite your_domain_or_ip.conf

      A continuación, realizaremos una prueba para ver que no haya errores de configuración:

      • sudo apache2ctl configtest

      Si la operación se completa de forma correcta, obtendrá un resultado similar a este:

      Output

      AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK

      La primera línea es un mensaje que le indica que la directiva ServerName no está configurada a nivel global. Si quiere deshacerse de ese mensaje, puede establecer ServerName en el nombre de dominio o la dirección IP de su servidor en /etc/apache2/apache2.conf. Esto es opcional, ya que el mensaje no causará problemas.

      Si el resultado contiene Syntax OK, en su archivo de configuración no habrá errores de sintaxis. Podemos volver a cargar Apache de forma segura para implementar nuestros cambios:

      • sudo systemctl reload apache2

      Ahora cargue su sitio en un navegador, asegurándose de usar https:// al principio.

      Debería ver un error. Esto es normal para un certificado autofirmado. El navegador le advierte que no puede verificar la identidad del servidor, porque nuestro certificado no está firmado por ninguna de sus autoridades de certificado conocidas. Para fines de prueba y uso personal, puede estar bien. Debería poder hacer clic en avanzada o más información y elegir continuar.

      Una vez que lo haga, su navegador cargará el mensaje it worked! (¡funcionó!).

      Nota: si su navegador no se conecta en absoluto al servidor, asegúrese de que su conexión no está siendo bloqueada por un firewall. Si utiliza ufw, los siguientes comandos abrirán los puertos 80 y 443:

      • sudo ufw allow "Apache Full"

      A continuación, añadiremos otra sección VirtualHost a nuestra configuración para que sirva las solicitudes HTTP sencillas y las redirija a HTTPS.

      Paso 4: Redirigir HTTP a HTTPS

      Actualmente, nuestra configuración solo responderá a las solicitudes HTTPS en el puerto 443. Es una buena práctica responder también en el puerto 80, incluso si quiere forzar que se cifre todo el tráfico. Configuraremos un VirtualHost para que responda a estas solicitudes no cifradas y las redireccione a HTTPS.

      Abra el mismo archivo de configuración Apache que iniciamos en pasos anteriores:

      • sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

      En la parte inferior, cree otro bloque VirtualHost para que coincida con las solicitudes en el puerto 80. Utilice la directiva ServerName para que coincida de nuevo con su nombre de dominio o su dirección IP. A continuación, utilice Redirect para que coincida con cualquier solicitud y las envíe al VirtualHost SSL. Asegúrese de incluir la barra de arrastre:

      /etc/apache2/sites-available/your_domain_or_ip.conf

      <VirtualHost *:80>
          ServerName your_domain_or_ip
          Redirect / https://your_domain_or_ip/
      </VirtualHost>
      

      Guarde y cierre este archivo cuando haya terminado, y vuelva a probar la sintaxis de configuración y a cargar Apache:

      • sudo apachectl configtest
      • sudo systemctl reload apache2

      Puede probar la nueva funcionalidad de redireccionamiento visitando su sitio con http:// simple delante de la dirección. Debería redireccionarse a https:// automáticamente.

      Conclusión

      Ahora ha configurado Apache para que sirva las solicitudes cifradas usando un certificado SSL autofirmado, y para redireccionar las solicitudes HTTP no cifradas a HTTPS.

      Si planea usar SSL para un sitio web público, debería pensar en comprar un nombre de dominio y usar una autoridad de certificado ampliamente compatible, como Let’s Encrypt.

      Para obtener más información sobre el uso de Let’s Encrypt con Apache, consulte nuestro tutorial Cómo proteger Apache con Let’s Encrypt en Ubuntu 20.04.



      Source link

      Cómo crear un certificado SSL autofirmado para Apache en Ubuntu 18.04


      Justin Ellingwood escribió una versión anterior de este tutorial.

      Introducción

      La TLS, o seguridad en la capa de transporte, y la SSL, plataforma antecesora cuya sigla significa “capa de sockets seguros”, son protocolos web que se utilizan para envolver el tráfico normal con una cobertura protegida cifrada.

      Mediante esta tecnología, los servidores pueden enviar tráfico de forma segura entre servidores y clientes sin la posibilidad de que los mensajes sean interceptados por terceros. El sistema de certificado también ayuda a los usuarios a verificar la identidad de los sitios con los que establecen conexión.

      En esta guía, le mostraremos la manera de configurar un certificado SSL autofirmado para su uso con un servidor web de Apache en Ubuntu 18.04.

      Nota: Un certificado autofirmado cifrará la comunicación entre su servidor y cualquier cliente. Sin embargo, dado que no está firmado por ninguna de las autoridades certificadoras de confianza incluidas con los navegadores web, los usuarios no pueden usar el certificado para validar la identidad de su servidor de forma automática.

      Es posible que un certificado autofirmado sea apropiado si no dispone de un nombre de dominio asociado con su servidor y para casos en los que una interfaz web cifrada no esté dirigida al usuario. Si dispone de un nombre de dominio, en muchos casos es mejor usar un certificado firmado por una autoridad certificadora (CA). Puede averiguar la manera de configurar un certificado de confianza gratuito a través del proyecto Let´s Encrypt aquí.

      Requisitos previos

      Antes de comenzar, deberá contar con un usuario no root configurado con privilegios sudo. Puede aprender a configurar una cuenta de usuario de este tipo siguiendo nuestra Configuración inicial de servidores con Ubuntu 18.04.

      También deberá tener instalado el servidor web de Apache. Si desea instalar una pila LAMP completa (Linux, Apache, MySQL y PHP) en su servidor, puede seguir nuestra guía de configuración de LAMP en Ubuntu 18.04. Si solo quiere el servidor web de Apache, omita los pasos correspondientes a PHP y MySQL.

      Una vez que cumpla con los requisitos previos, siga los pasos que se muestran a continuación.

      Paso 1: Crear el certificado SSL

      La TLS y la SSL funcionan utilizando una combinación de un certificado público y una clave privada. La clave SSL se mantiene secreta en el servidor. Se utiliza para cifrar contenido que se envía a los clientes. El certificado SSL se comparte de forma pública con cualquiera que solicite el contenido. Puede utilizarse para descifrar el contenido firmado por la clave SSL asociada.

      Podemos crear un par de clave y certificado autofirmados con OpenSSL en un único comando:

      • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

      Se le harán varias preguntas. Antes de abordar eso, observemos lo que sucede en el comando que emitimos:

      • openssl: es la herramienta de línea de comandos básica para crear y administrar certificados, claves, y otros archivos de OpenSSL.
      • req: este subcomando especifica que deseamos usar la administración de la solicitud de firma de certificados (CSR) X.509. El “X.509” es un estándar de infraestructura de claves públicas al que se adecuan SSL y TLS para la administración de claves y certificados a través de él. Queremos crear un nuevo certificado X.509, por lo que usaremos este subcomando.
      • -x509: modifica aún más el subcomando anterior al indicar a la utilidad que deseamos crear un certificado autofirmado en lugar de generar una solicitud de firma de certificados, como normalmente sucede.
      • -nodes: indica a OpenSSL que omita la opción para proteger nuestro certificado con una frase de contraseña. Necesitamos que Apache pueda leer el archivo, sin intervención del usuario, cuando se inicie el servidor. Una frase de contraseña evitaría que esto suceda porque tendríamos que ingresarla tras cada reinicio.
      • -days 365: esta opción establece el tiempo durante el cual el certificado se considerará válido. En este caso, lo configuramos por un año.
      • -newkey rsa:2048: especifica que deseamos generar un nuevo certificado y una nueva clave al mismo tiempo. No creamos la clave que se requiere para firmar el certificado en un paso anterior, por lo que debemos crearla junto con el certificado. La parte rsa:2048 le indica que cree una clave RSA de 2048 bits de extensión.
      • -keyout: esta línea indica a OpenSSL dónde colocar el archivo de clave privada generado que estamos creando.
      • -out: indica a OpenSSL dónde colocar el certificado que creamos.

      Como se mencionó anteriormente, estas opciones crearán un archivo de clave y un certificado. Se harán algunas preguntas sobre nuestro servidor con el fin de insertar la información de forma correcta en el certificado.

      Complete las solicitudes de forma adecuada. La línea más importante es aquella en la que se solicita Common Name (e.g. server FQDN or YOUR name). Debe ingresar el nombre de dominio asociado con su servidor o, lo más probable, la dirección IP pública de su servidor.

      La totalidad de las solicitudes tendrán un aspecto similar a este:

      Output

      Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:New York City Organization Name (eg, company) [Internet Widgits Pty Ltd]:Bouncy Castles, Inc. Organizational Unit Name (eg, section) []:Ministry of Water Slides Common Name (e.g. server FQDN or YOUR name) []:server_IP_address Email Address []:admin@your_domain.com

      Los dos archivos que creó se ubicarán en los subdirectorios correspondientes en /etc/ssl.

      Paso 2: Configurar Apache para usar SSL

      Hemos creado nuestros archivos de clave y certificado en el directorio /etc/ssl. Ahora solo debemos modificar nuestra configuración de Apache para aprovecharlos.

      Aplicaremos algunos ajustes a nuestra configuración:

      1. Crearemos un fragmento de configuración para especificar configuraciones SSL seguras predeterminadas.
      2. Modificaremos el archivo de host virtual de Apache SSL incluido para apuntar a los certificados SSL que generamos.
      3. (Recomendado) Modificaremos el archivo de host virtual no cifrado para redireccionar las solicitudes de forma automática al host virtual cifrado.

      Al terminar, deberíamos contar con una configuración SSL segura.

      Crear un fragmento de configuración de Apache con ajustes de cifrado seguro

      Primero, crearemos un fragmento de configuración de Apache para definir algunos ajustes de SSL. Con esto, se configurará Apache con un conjunto de cifrado SSL seguro y se habilitarán algunas características avanzadas que ayudarán a mantener protegido nuestro servidor. Los parámetros que configuraremos pueden utilizarse a través de cualquier hosting virtual que habilite SSL.

      Cree un nuevo fragmento en el directorio /etc/apache2/conf-available. Daremos el nombre ssl-params.conf al archivo para que quede claro su propósito:

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

      Para configurar Apache SSL de forma segura, usaremos las recomendaciones que Remy van Elst da en el sitio de Cipherli.st. Este sitio está diseñado para proporcionar configuraciones de cifrado fáciles de utilizar para software popular.

      Las configuraciones propuestas en el sitio del vínculo anterior ofrecen una seguridad confiable. A veces, esto se hace a costa de una mayor compatibilidad con el cliente. Si necesita ofrecer compatibilidad con clientes anteriores, existe una lista alternativa a la que se puede acceder haciendo clic en el enlace de la página con la etiqueta “Sí, quiero un conjunto de cifrado que funcione con el software anterior o heredado”. Esa lista puede sustituirse por los elementos copiados a continuación.

      La elección de la configuración que utilizará dependerá en gran medida de aquello para lo que deba ofrecer compatibilidad. Ambas opciones proporcionarán una gran seguridad.

      Para nuestros propósitos, podemos copiar las configuraciones proporcionadas en su totalidad. Sólo haremos un pequeño cambio. Deshabilitaremos el encabezado Strict-Transport-Security (HSTS).

      La precarga del HSTS proporciona una mayor seguridad, pero puede tener consecuencias importantes si se habilita accidentalmente o de forma incorrecta. En esta guía, no habilitaremos las configuraciones, pero puede aplicar una modificación si está seguro de comprender las implicaciones.

      Antes de tomar una decisión, tómese un momento para informarse sobre seguridad estricta de transporte de HTTP, o HSTS, y en particular sobre la funcionalidad “preload”.

      Pegue la configuración en el archivo ssl-params.conf que abrimos:

      /etc/apache2/conf-available/ssl-params.conf

      SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
      SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
      SSLHonorCipherOrder On
      # Disable preloading HSTS for now.  You can use the commented out header line that includes
      # the "preload" directive if you understand the implications.
      # Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
      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
      

      Guarde y cierre el archivo cuando haya terminado.

      Modificar el archivo de host virtual de Apache SSL predeterminado

      A continuación, modificaremos /etc/apache2/sites-available/default-ssl.conf, el archivo de host virtual de SSL predeterminado. Si usa un archivo de bloque de servidor diferente, sustituya su nombre en los comandos que se muestran a continuación.

      Antes de continuar, realizaremos una copia de seguridad del archivo original de host virtual de SSL:

      • sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak

      Ahora, abra el archivo de host virtual de SSL para realizar ajustes:

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

      En su interior, con la mayoría de los comentarios eliminados, el archivo de host virtual debería tener un aspecto similar al siguiente por defecto:

      /etc/apache2/sites-available/default-ssl.conf

      <IfModule mod_ssl.c>
              <VirtualHost _default_:443>
                      ServerAdmin webmaster@localhost
      
                      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>
      

      Haremos algunos ajustes menores en el archivo. Configuraremos las cosas normales que querríamos ajustar en un archivo de host virtual (dirección de correo electrónico de ServerAdmin, ServerName, etc.), y ajustaremos las directivas SSL para que apunten a nuestros archivos de certificados y claves.

      Tras realizar estos cambios, su bloque de servidor debe tener un aspecto similar a este:

      /etc/apache2/sites-available/default-ssl.conf

      <IfModule mod_ssl.c>
              <VirtualHost _default_:443>
                      ServerAdmin your_email@example.com
                      ServerName server_domain_or_IP
      
                      DocumentRoot /var/www/html
      
                      ErrorLog ${APACHE_LOG_DIR}/error.log
                      CustomLog ${APACHE_LOG_DIR}/access.log combined
      
                      SSLEngine on
      
                      SSLCertificateFile      /etc/ssl/certs/apache-selfsigned.crt
                      SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
      
                      <FilesMatch ".(cgi|shtml|phtml|php)$">
                                      SSLOptions +StdEnvVars
                      </FilesMatch>
                      <Directory /usr/lib/cgi-bin>
                                      SSLOptions +StdEnvVars
                      </Directory>
      
              </VirtualHost>
      </IfModule>
      

      Guarde y cierre el archivo cuando haya terminado.

      (Recomendado) Modificar el archivo de host HTTP para el redireccionamiento a HTTPS

      En su estado actual, el servidor proporcionará tanto tráfico HTTP no cifrado como tráfico HTTPS cifrado. Para una mayor seguridad, en la mayoría de los casos se recomienda redireccionar HTTP a HTTPS de forma automática. Si no desea ni necesita esta funcionalidad, puede omitir esta sección sin riesgo.

      Para ajustar el archivo de host virtual no cifrado de modo que se redireccione todo el tráfico y cuente con cifrado SSL, podemos abrir el archivo /etc/apache2/sites-available/000-default.conf:

      • sudo nano /etc/apache2/sites-available/000-default.conf

      Dentro de los bloques de configuración de VirtualHost, debemos añadir una directiva Redirect, que dirija todo el tráfico a la versión SSL del sitio:

      /etc/apache2/sites-available/000-default.conf

      <VirtualHost *:80>
              . . .
      
              Redirect "/" "https://your_domain_or_IP/"
      
              . . .
      </VirtualHost>
      

      Guarde y cierre el archivo cuando haya terminado.

      Paso 3: Ajustar el firewall

      Si tiene habilitado el firewall ufw, como se recomienda en las guías de los requisitos previos, es posible que deba ajustar la configuración para permitir el tráfico de SSL. Afortunadamente, Apache registra algunos perfiles con ufw después de la instalación.

      Podemos ver los perfiles disponibles escribiendo lo siguiente:

      Debería ver una lista como esta:

      Output

      Available applications: Apache Apache Full Apache Secure OpenSSH

      Puede ver la configuración actual escribiendo lo siguiente:

      Si antes sólo permitía tráfico HTTP regular, su resultado puede tener este aspecto:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

      Para permitir adicionalmente la entrada de tráfico HTTPS, podemos permitir el perfil “Apache Full” y luego eliminar la asignación de perfil “Apache” redundante:

      • sudo ufw allow 'Apache Full'
      • sudo ufw delete allow 'Apache'

      Con esto, su estado debería de tener este aspecto:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

      Paso 4: Habilitar los cambios en Apache

      Ahora que realizamos los cambios y ajustamos el firewall, podemos habilitar los módulos y encabezados SSL de Apache, y también nuestro host virtual listo para SSL, y reiniciar Apache.

      Podemos habilitar mod_ssl, el módulo SSL de Apache y mod_headers, que necesitan algunas de las configuraciones de nuestro fragmento SSL, con el comando a2enmod:

      • sudo a2enmod ssl
      • sudo a2enmod headers

      A continuación, podemos habilitar nuestro host virtual SSL con el comando a2ensite:

      • sudo a2ensite default-ssl

      También debemos habilitar nuestro archivo ssl-params.conf, para leer los valores que configuramos:

      En este punto, nuestro sitio y los módulos necesarios quedarán habilitados. Deberíamos comprobar que no haya errores de sintaxis en nuestros archivos. Podemos hacerlo escribiendo lo siguiente:

      • sudo apache2ctl configtest

      Si la operación se completa de forma correcta, obtendrá un resultado similar a este:

      Output

      AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK

      La primera línea es solo un mensaje que le indica que la directiva ServerName no está configurada a nivel global. Si quiere deshacerse de ese mensaje, puede establecer ServerName en el nombre de dominio o la dirección IP de su servidor en /etc/apache2/apache2.conf. Esto es opcional, ya que el mensaje no causará problemas.

      Si el resultado contiene Syntax OK, en su archivo de configuración no habrá errores de sintaxis. Podemos reiniciar Apache de forma segura para implementar nuestros cambios:

      • sudo systemctl restart apache2

      Paso 5: Probar el cifrado

      Ahora, estamos listos para probar nuestro servidor SSL.

      Abra su navegador web y escriba https:// seguido del nombre de dominio o el IP de su servidor en la barra de direcciones:

      https://server_domain_or_IP
      

      Debido a que el certificado que creamos no está firmado por una de las autoridades de certificados de confianza de su navegador, es probable que vea una advertencia de aspecto intimidante como la que aparece a continuación:

      Advertencia de certificado autofirmado de Apache

      Esto está previsto y es normal. Sólo nos interesa el aspecto de cifrado de nuestro certificado. No nos importa la validación de terceros de la autenticidad de nuestro host. Haga clic en “ADVANCED” y luego en el enlace proporcionado para acceder a su host de cualquier manera:

      Anulación autofirmada de Apache

      Debería acceder a su sitio. Si observa la barra de direcciones del navegador, verá un candado con una “x” encima. En este caso, esto solo significa que no es posible validar el certificado. Todavía se está cifrando su conexión.

      Si configuró Apache para redireccionar HTTP a HTTPS, también puede comprobar si el redireccionamiento funciona de manera correcta:

      http://server_domain_or_IP
      

      Si como resultado aparece el mismo icono, significa que el redireccionamiento funcionó de manera correcta.

      Paso 6: Cambiar a una redireccionamiento permanente

      Si su redireccionamiento funcionó de forma correcta y está seguro que quiere permitir solo tráfico cifrado, deberá modificar el host virtual de Apache no cifrado de nuevo para que el redireccionamiento sea permanente.

      Abra de nuevo el archivo de configuración de su bloque de servidor:

      • sudo nano /etc/apache2/sites-available/000-default.conf

      Encuentre la línea de Redirect que agregamos previamente. Añada permanent a esa línea, que cambia el redireccionamiento del tipo temporal 302 al tipo permanente 301:

      /etc/apache2/sites-available/000-default.conf

      <VirtualHost *:80>
              . . .
      
              Redirect permanent "/" "https://your_domain_or_IP/"
      
              . . .
      </VirtualHost>
      

      Guarde y cierre el archivo.

      Revise su configuración en busca de errores de sintaxis:

      • sudo apache2ctl configtest

      Cuando esté listo, reinicie Apache para que el redireccionamiento sea permanente:

      • sudo systemctl restart apache2

      Conclusión

      De esta manera, habrá configurado su servidor de Apache para aplicar un cifrado seguro a las conexiones de los clientes. Esto le permitirá proporcionar las solicitudes de forma segura y evitará que individuos externos lean su tráfico.



      Source link