Búsqueda de sitios web

Cómo proteger Apache con SSL y Let's Encrypt en FreeBSD


En este tutorial aprenderemos cómo proteger el servidor Apache HTTP con certificados TLS/SSL ofrecidos por Let's Encrypt en FreeBSD 11. x. También cubriremos cómo automatizar el proceso de renovación del certificado para Lets' Encrypt.

Lea también: Instale Let's Encrypt para Nginx en FreeBSD

El servidor web Apache utiliza los certificados TLS/SSL para cifrar la comunicación entre los nodos finales, o más comúnmente 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 obtención de certificados confiables de forma gratuita.

Requisitos:

  1. Instalación de FreeBSD 11.x
  2. Diez cosas que hacer después de la instalación de FreeBSD
  3. Cómo instalar Apache, MariaDB y PHP en FreeBSD

Paso 1: Configurar Apache SSL en FreeBSD

1. Antes de comenzar a instalar la utilidad certbot y crear el archivo de configuración TSL para Apache, primero cree dos directorios distintos llamados sitios disponibles y sites-enabled 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 hosting 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. Después de haber 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

Agregue la siguiente línea:

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

3. A continuación, habilite el módulo TLS para Apache creando lo siguiente, un nuevo archivo 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, descomente el módulo SSL del archivo /usr/local/etc/apache24/httpd.conf eliminando el hashtag del 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 sites-available, preferiblemente con el nombre de su dominio, como se presenta en el siguiente extracto:

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

Agregue la siguiente configuración de virtualhost 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 ServerName, ServerAlias, ErrorLog, CustomLog en consecuencia.

Paso 2: Instale Lets'Encrypt en FreeBSD

6. En el siguiente paso, ejecute el siguiente comando para instalar la utilidad certbot proporcionada por Let's Encrypt, que se utilizará para obtener < Certificados gratuitos de Apache TSL para tu dominio.

Mientras instala 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 finalizado el proceso de compilación, ejecute el siguiente comando para actualizar la utilidad certbot y las dependencias requeridas de certbot.

pkg install py27-certbot
pkg install py27-acme

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

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

Mientras obtiene 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 con los socios de Let's Encrypt.

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email 
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 

-------------------------------------------------------------------------------
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 presenta en el siguiente ejemplo.

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

Paso 3: actualice los certificados Apache TLS en FreeBSD

10. Para agregar certificados Let's 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 al directorio sites-enabled, verifique las configuraciones de Apache para detectar posibles errores de sintaxis y, si la sintaxis es correcta, reinicie el demonio 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 Apache está escuchando en el puerto HTTPS 443, ejecute el siguiente comando para enumerar los sockets de red httpd.

sockstat -4 | grep httpd

13. Puede navegar a la dirección de su dominio desde un navegador a través del protocolo HTTPS para confirmar que los certificados Let's Encrypt se hayan aplicado correctamente.

https://www.yourdomain.com

14. Para obtener información adicional sobre el certificado Let's Encrypt emitido desde la línea de comando, utilice 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 Let's Encrypt CA desde un dispositivo móvil, como se ilustra en la siguiente captura de pantalla móvil.

¡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/