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


En esta guía, analizaremos cómo proteger el servidor web Nginx en FreeBSD con TLS/SSL ofrecidos por Certificados de encriptación de Autoridad . También le mostraremos cómo renovar automáticamente los certificados de Encriptación de Lets antes de la fecha de caducidad.

TLS , un acrónimo de Seguridad de la capa de transporte , es un protocolo que se ejecuta bajo el protocolo HTTP y utiliza certificados y claves para encapsular los paquetes y encriptar los datos intercambiados entre un servidor y un cliente, o en este caso entre el servidor web Nginx y el navegador del cliente, para asegurar la conexión, de modo que un tercero, que podría interceptar el tráfico, no pueda descifrar la transmisión.

El proceso de obtención de un certificado gratuito Let's Encrypt en FreeBSD se puede simplificar enormemente instalando la utilidad de cliente certboot , que es el cliente oficial de Let's Encrypt. Para generar y descargar certificados.

  1. Install FBEMP (Nginx, MariaDB and PHP) stack in FreeBSD

Paso 1: Configurar Nginx TLS / SSL

1. De forma predeterminada, la configuración del servidor TLS/SSL no está habilitada en FreeBSD porque las declaraciones de bloqueo del servidor TLS se comentan en Nginx archivo de configuración predeterminado.

Para activar el servidor TLS en Nginx , abra el archivo de configuración nginx.conf , busque la línea que define el inicio de SSL y actualice todo el bloque para que se vea como en la muestra de abajo.

# nano /usr/local/etc/nginx/nginx.conf

Extracto del bloque Nginx HTTPS:

Nginx HTTPS Configuration

server {
       listen 443 ssl  default_server;
       server_name  www.yourdomain.com;
	
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
	error_page   500 502 503 504  /50x.html;
        
	location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
	
	location / {
	    root   /usr/local/www/nginx;
       	    index  index.html index.htm;
	    try_files $uri $uri/ /index.php?$args;
				}

	ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_dhparam /usr/local/etc/nginx/dhparam.pem;
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 10m;
	ssl_ciphers HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	# Use gzip compression
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.0;

	# Set a variable to work around the lack of nested conditionals
	
	set $cache_uri $request_uri;
	
	location ~ /.well-known {
	allow all;
		}
    


        location ~ \.php$ {
        root	/usr/local/www/nginx;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        #fastcgi_param  SCRIPT_FILENAME /scripts$fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME $request_filename;    
		include        fastcgi_params;
        }	
    }

El bloque anterior, además del bloque SSL , también contiene algunas declaraciones para habilitar la compresión gzip y FastCGI Process Manager , que se utiliza para pasar el código PHP a PHP-FPM gateway para ejecutar aplicaciones web dinámicas.

Después de haber agregado el código anterior al archivo de configuración principal de Nginx , no reinicie el daemon ni aplique la configuración antes de instalar y obtener un certificado de Permitir cifrar para su dominio.

Paso 2: Instalar el cliente Certbot en FreeBSD

2. El proceso de instalación de la utilidad de cliente Let's Encrypt certbot en FreeBSD implica descargar el código fuente de py-certbot y compilarlo localmente, emitiendo los siguientes comandos.

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

3. compilar la utilidad py-certbot lleva mucho tiempo en comparación con la instalación de un paquete binario regular. Durante este tiempo, es necesario descargar una serie de dependencias compiladas localmente en FreeBSD.

Además, aparecerá una serie de indicaciones en su pantalla, que le exigirán que seleccione los paquetes que se usarán en el momento de la compilación para cada dependencia. En la primera pantalla, seleccione las siguientes herramientas, presionando la tecla [espacio] para compilar la dependencia de python27 , como se ilustra en la imagen de abajo.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • THREADS
  • UCS4 for Unicode support

4. A continuación, seleccione DOCS y THREADS para la dependencia de gettext-tools y presione OK para continuar como se muestra en la imagen de abajo.

5. En la siguiente pantalla, desactive la opción PRUEBAS para libffi-3.2.1 y presione Aceptar para moverse promover.

6. A continuación, presione espacio para seleccionar DOCS para la dependencia de py27-enum34 , que instalará la documentación para esto y presione Aceptar para continuar, como se ilustra en la siguiente captura de pantalla.

7. Finalmente, elija instalar ejemplos de ejemplo para la dependencia de py27-openssl presionando la tecla [espacio] y presione Aceptar para finalizar el proceso de compilación e instalación para el cliente py-certbot .

8. Después de que finalice el proceso de compilación e instalación de la utilidad py-certbot , ejecute el siguiente comando para actualizar la herramienta a la versión más reciente del paquete, como se muestra en la debajo de las capturas de pantalla.

# pkg install py27-certbot

9. Para evitar algunos problemas, puede ocurrir al obtener un certificado gratuito de Vamos a cifrar , el error más común es “ pkg_resources.DistributionNotFound ” , asegúrese de que las siguientes dos dependencias también estén presentes en su sistema: py27-salt y py27-acme .

# pkg install py27-salt
# pkg install py27-acme

Paso 3: Instalar el certificado de Encrypt para Nginx en FreeBSD

10. Para obtener un certificado independiente de Let's Encrypt para su dominio, ejecute el siguiente comando y proporcione su nombre de dominio y todos los subdominios para los que desea obtener certificados al implicar el -d bandera.

# certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

11. Mientras genera el certificado, se le pedirá que ingrese su dirección de correo electrónico y que acepte los Términos de servicio de Encrypt. Escriba a desde el teclado para aceptar y continuar y también se le preguntará si desea compartir su dirección de correo electrónico con los socios de Let's Encrypt.

En caso de que no quiera compartir su dirección de correo electrónico, simplemente ingrese la palabra no en la solicitud y presione la tecla [ingresar] para continuar. Una vez que los certificados para su dominio hayan sido obtenidos con éxito, recibirá algunas notas importantes que le informarán dónde se almacenan los certificados en su sistema y cuándo caducan.

12. En caso de que desee obtener un certificado de Let's Encrypt utilizando el complemento “ webroot ”, agregue el directorio webroot del servidor Nginx para su dominio. , ejecute el siguiente comando con las marcas --webroot y -w . De manera predeterminada, si no ha cambiado la ruta de acceso de Nginx webroot, debe ubicarse en la ruta del sistema /usr/local/www/nginx/.

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

Como en el procedimiento --strandalone para obtener un certificado, el procedimiento --webroot también le pedirá que proporcione una dirección de correo electrónico para la renovación de certificados y avisos de seguridad, para presionar < code> a para aceptar los términos y condiciones de Let's Encrypt y no o yes para o no compartir la dirección de correo electrónico de los socios de Let's Encrypt como se ilustra en la siguiente muestra.

Tenga en cuenta que el cliente certbot puede detectar una dirección de correo electrónico falsa y no le permitirá continuar generando un certificado hasta que proporcione una dirección de correo electrónico real.

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]  #A fake email address will be detected
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/nginx/ 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-12-28. 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

Paso 4: Actualizar los certificados TLS de Nginx

13. La ubicación de los certificados y claves de Let's Encrypt en FreeBSD es /usr/local/etc/letsencrypt/live/www.yourdomain.com/ ruta del sistema. Ejecute el comando ls para mostrar los componentes de su certificado Let's Encrypt: el archivo de cadena, el archivo de cadena completa, la clave privada y el archivo de certificado, como se ilustra en el siguiente ejemplo.

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

14. Para instalar los certificados de Let's Encrypt para su dominio en el servidor web Nginx, abra el archivo de configuración principal de Nginx o el archivo de configuración para el servidor TLS de Nginx, en caso de que sea un archivo separado, y modifique las líneas siguientes para reflejar la ruta de acceso de Encriptar certificados emitidos como se ilustra a continuación.

# nano /usr/local/etc/nginx/nginx.conf

Actualice las siguientes líneas para que se vean como en este ejemplo:

ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";

15. Además, si la línea ssl_dhparam está presente en la configuración de Nginx SSL , debe generar un nuevo bit 2048 Diffie – Hellman con el siguiente comando:

# openssl dhparam –out /usr/local/etc/nginx/dhparam.pem 2048 

16. Finalmente, para activar la configuración TLS de Nginx, primero verifique la configuración global de Nginx para detectar posibles errores de sintaxis y, luego, reinicie el servicio de Nginx para aplicar la configuración SSL emitiendo los siguientes comandos.

# nginx -t
# service nginx restart

17. Confirme si el daemon Nginx está enlazando al puerto 443 emitiendo los siguientes comandos que pueden mostrar todos los sockets de red abiertos en el sistema en estado de escucha.

# netstat -an -p tcp| grep LISTEN
# sockstat -4 

18. También puede visitar la dirección de su dominio a través del protocolo HTTPS abriendo un navegador y escriba la siguiente dirección para confirmar que los certificados de Letly Encrypt funcionan como se esperaba. Debido a que está utilizando certificados generados por una autoridad de certificación válida, no se debe mostrar ningún error en el navegador.

https://www.yourdomain.com

19. La utilidad Openssl también puede ayudarlo a encontrar información sobre un certificado obtenido de Let´s Encrypt CA, ejecutando el comando con las siguientes opciones.

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

En caso de que desee forzar a Nginx a dirigir todas las solicitudes de http a https recibidas para su dominio en el puerto 80 a HTTPS , abra el archivo de configuración Nginx, busque la directiva del servidor para el puerto 80 y agregue la línea de abajo después de la sentencia server_name como se ilustra en el siguiente ejemplo.

rewrite ^(.*) https://www.yourdomain.com$1 permanent;

20. La configuración de la renovación automática para el certificado emitido por la autoridad de Encrypt Let antes de que caduque se puede hacer programando un trabajo cron para que se ejecute una vez al día emitiendo el siguiente comando.

# crontab -e

Cron tarea para renovar el certificado.

0 0 * * * certbot renew >> /var/log/letsencrypt.log

¡Eso es todo! Nginx ahora puede ofrecer aplicaciones web seguras a sus visitantes utilizando los certificados gratuitos de Let's Encrypt.

Todos los derechos reservados © Linux-Console.net • 2019-2021