Cómo proteger Apache con SSL y Vamos a cifrar en FreeBSD


En este tutorial, aprenderemos cómo asegurar el servidor Apache HTTP con TLS/SSL ofrecidos por Vamos a cifrar en FreeBSD 11. x . También cubriremos cómo automatizar el proceso de renovación del certificado para Lets ’Encrypt.

El servidor web Apache utiliza los certificados TLS/SSL para cifrar la comunicación entre los nodos finales, o más ordinarios entre el servidor y el cliente para brindar seguridad. Let's Encrypt proporciona la utilidad de línea de comandos certbot , que es una aplicación que puede facilitar la forma en que puede obtener certificados de confianza de forma gratuita.

  1. Installation of FreeBSD 11.x
  2. 10 Things to Do After FreeBSD Installation
  3. How to Install Apache, MariaDB and PHP in FreeBSD

Paso 1: Configurar Apache SSL en FreeBSD

1. Antes de comenzar a instalar la utilidad certbot y crear el archivo de configuración de TSL para Apache , primero cree dos directorios distintos llamados sitios-disponibles y sitios habilitados en el directorio de configuración raíz de Apache emitiendo los siguientes comandos.

El propósito de estos dos directorios es facilitar la gestión de la configuración del hospedaje virtual en el sistema, sin modificar el archivo de configuración principal de Apache httpd.conf cada vez que agregamos un nuevo host virtual.

# mkdir /usr/local/etc/apache24/sites-available
# mkdir /usr/local/etc/apache24/sites-enabled

2. Una vez que haya creado ambos directorios, abra el archivo Apache httpd.conf con un editor de texto y agregue la siguiente línea cerca del final del archivo, como se ilustra a continuación.

# nano /usr/local/etc/apache24/httpd.conf

Añade la siguiente línea:

IncludeOptional etc/apache24/sites-enabled/*.conf

3. A continuación, habilite el módulo TLS para Apache creando el siguiente archivo nuevo llamado 020_mod_ssl.conf en modules.d directorio con el siguiente contenido.

# nano /usr/local/etc/apache24/modules.d/020_mod_ssl.conf

Agregue las siguientes líneas al archivo 020_mod_ssl.conf .

Listen 443
SSLProtocol ALL -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLPassPhraseDialog  builtin
SSLSessionCacheTimeout  300

4. Ahora, elimine el comentario del módulo SSL de /usr/local/etc/apache24/httpd.conf eliminando el hashtag desde el principio de la siguiente línea como se ilustra a continuación:

LoadModule ssl_module libexec/apache24/mod_ssl.so

5. A continuación, cree el archivo de configuración TLS para su dominio en el directorio sitios disponibles , preferiblemente con el nombre de su dominio, tal como se presenta en el extracto de abajo:

# nano /usr/local/etc/apache24/sites-available/bsd.lan-ssl.conf

Agregue la siguiente configuración de host virtual al archivo bsd.lan-ssl.conf .

<VirtualHost *:443>
    ServerName www.yourdomain.com
	ServerAlias yourdomain.com
                DocumentRoot "/usr/local/www/apache24/data/"
	SSLEngine on

	SSLCertificateFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem"
	SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem"
	SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>

<Directory "/usr/local/www/apache24/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

	BrowserMatch "MSIE [2-5]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0

	CustomLog "/var/log/apache/httpd-ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

	<Directory "/usr/local/www/apache24/data/">
            Options Indexes FollowSymLinks MultiViews
        #AllowOverride controls what directives may be placed in .htaccess files.       
                        AllowOverride All
        #Controls who can get stuff from this server file
                        Require all granted
        </Directory>
       
    ErrorLog "/var/log/apache/yourdomain.ssl-error.log"
    CustomLog "/var/log/apache/yourdomain.ssl-access_log" combined

</VirtualHost>

Asegúrese de reemplazar la variable de nombre de dominio de las declaraciones de Nombre de servidor , ServerAlias ​​, ErrorLog , CustomLog en consecuencia.

Paso 2: Instalar Lets’Encrypt en FreeBSD

6. En el siguiente paso, ejecute el siguiente comando para instalar certbot , la utilidad proporcionada por Let's Encrypt , que se usará para obtener < strong> Apache TSL certificados gratuitos para su dominio.

Al instalar certbot , se mostrará una serie de mensajes en su pantalla. Utilice la siguiente captura de pantalla para configurar la utilidad certbot . Además, compilar e instalar la utilidad certbot puede llevar algún tiempo, dependiendo de los recursos de su máquina.

# cd /usr/ports/security/py-certbot
# make install clean

7. Una vez que el proceso de compilación haya finalizado, ejecute el comando a continuación para actualizar la utilidad certbot y las dependencias necesarias para certbot .

# pkg install py27-certbot
# pkg install py27-acme

8. Para generar un certificado para su dominio, ejecute el comando como se ilustra a continuación. Asegúrate de proporcionar la ubicación correcta de webroot donde se almacenan los archivos de tu sitio web en el sistema de archivos (directiva DocumentRoot de tu archivo de configuración de dominio) usando la marca -w . Si tiene varios subdominios, agréguelos a todos con el indicador -d .

# certbot certonly --webroot -w /usr/local/www/apache24/data/ -d yourdomain.com -d www.yourdomain.com

Al obtener el certificado, proporcione una dirección de correo electrónico para la renovación del certificado, presione A para aceptar los términos y condiciones de Let´s Encrypt y n para no compartir la dirección de correo electrónico de Letters Encrypt.

Salida del comando Certbot

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email protected]
There seem to be problems with that address. Enter email address (used for
urgent renewal and security notices)  If you really want to skip this, you can
run the client with --register-unsafely-without-email but make sure you then
backup your account key from /etc/letsencrypt/accounts   (Enter 'c' to cancel):[email protected]

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a ------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: n Obtaining a new certificate Performing the following challenges: http-01 challenge for www.domain.com Using the webroot path /usr/local/www/apache24/data for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Your cert will expire on 2017-11-15. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /usr/local/etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

9. Una vez que haya obtenido los certificados para su dominio, puede ejecutar el comando ls para enumerar todos los componentes del certificado (cadena, clave privada, certificado) como se muestra en el siguiente ejemplo.

# ls -al /usr/local/etc/letsencrypt/live/www.yourdomain.com/

Paso 3: Actualizar los certificados Apache TLS en FreeBSD

10. Para agregar los certificados de Let Encrypt a su sitio web, abra el archivo de configuración de apache para su dominio y actualice las siguientes líneas para reflejar la ruta de los certificados emitidos.

# nano /usr/local/etc/apache24/sites-available/bsd.lan-ssl.conf

Agregue estas líneas de certificado TLS:

SSLCertificateFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem"
	SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem"
	SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem"

11. Finalmente, habilite el archivo de configuración TLS, creando un enlace simbólico para el archivo de configuración TLS de su dominio en el directorio sitios habilitados , verifique las configuraciones de Apache para detectar posibles errores de sintaxis y, si la sintaxis es correcta, reinicie el demonio de Apache emitiendo los siguientes comandos.

# ln -sf /usr/local/etc/apache24/sites-available/bsd.lan-ssl.conf /usr/local/etc/apache24/sites-enabled/
# apachectl -t
# service apache24 restart

12. Para verificar si el servicio de Apache está escuchando en HTTPS puerto 443 , emita el siguiente comando para listar los sockets de red httpd.

# sockstat -4 | grep httpd

13. Puedes navegar a la dirección de tu dominio desde un navegador a través del protocolo HTTPS para confirmar que los certificados de Encriptación de Let se aplican correctamente.

https://www.yourdomain.com

14. Para obtener información adicional sobre el certificado de Cifrado de Let emitido desde la línea de comandos, use el comando openssl de la siguiente manera.

# openssl s_client -connect www.yourdomain.com:443

15. También puede verificar si el tráfico está cifrado con un certificado válido proporcionado por Encriptar CA desde un dispositivo móvil, como se muestra en la siguiente captura de pantalla del dispositivo.

¡Eso es todo! Los clientes ahora pueden visitar su sitio web de forma segura, porque el tráfico que fluye entre el servidor y el navegador del cliente está cifrado. Para tareas más complejas relacionadas con la utilidad certbot, visite el siguiente enlace: https://certbot.eff.org/