Cómo proteger Nginx con SSL y cifremos en FreeBSD

Cómo proteger Nginx con SSL y cifremos en FreeBSD

En esta guía, analizaremos cómo proteger el servidor web Nginx. en FreeBSD. con los certificados TLS/SSL. ofrecidos por Vamos a cifrar la autoridad de certificación. También le mostraremos cómo renovar automáticamente los certificados Lets ‘Encrypt antes de la fecha de vencimiento.

TLS. un acrónimo de Transport Layer Security. 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 Nginx. servidor web y 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.

Lea también. Instale Let’s Encrypt para Apache en FreeBSD

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

Requisitos

  1. Instalar FBEMP (Nginx, MariaD B y PHP) en FreeBSD

Paso 1: Configurar Nginx TLS/SSL

1.. Por defecto, TLS La configuración del servidor/SSL. no está habilitada en FreeBSD. porque las declaraciones de bloqueo del servidor TLS. están comentadas en el archivo de configuración predeterminado de Nginx.

freestar.config.enabled_slots.push

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

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

Extracto del bloque Nginx HTTPS:

Servidor de configuración Nginx HTTPS listen 443 ssl default_server; nombre_servidor 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; ubicación =/50x.html root/usr/local/www/nginx-dist; ubicación/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 compartido: SSL: 1 m; ssl_session_timeout 10m; ssl_ciphers ALTO:! aNULL:! MD5; ssl_prefer_server_ciphers on; # Utilice la compresión gzip gzip en; gzip_disable “msie6”; gzip_vary on; gzip_proxied any; gzip_comp_level 5; gzip_buffers 16 8k; gzip_http_version 1.0; # Establecer una variable para solucionar la falta de condicionales anidados set $ cache_uri $ request_uri; ubicación ~/.well-known permitir todo; ubicación ~ \ .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; incluir 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 código PHP a Puerta de enlace PHP-FPM. para ejecutar aplicaciones web dinámicas.

Una vez que haya agregado el código anterior al archivo de configuración principal de Nginx. no reinicie el demonio o aplique la configuración antes de instalar y obtener un certificado Let’s Encrypt. para su dominio.

Paso 2: Instale 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 comparando para instalar un regu paquete binario lar. Durante este tiempo, es necesario descargar una serie de dependencias compiladas localmente en FreeBSD.

Además, una serie de mensajes aparecerán en su pantalla, exigiéndole que seleccione qué paquetes 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 python27. como se ilustra en la imagen de abajo.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • THREADS
  • UCS4 para soporte Unicode

 Habilitar UCS4 para Unicode  Habilitar UCS4 para Unicode Habilitar UCS4 para Unicode

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

 Instalar documentación  Instalar documentación Instalar documentación

5.. En la siguiente pantalla, deje las PRUEBAS. opción desactivada para libffi-3.2.1. y presione Aceptar. para avanzar.

 Desactivar PRUEBAS para libffi  Desactivar PRUEBAS para libffi Deshabilitar TESTS para libffi

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

 Instalar documentación para Py27 Instalar documentación para Py27 Instalar documentación para Py27

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

 Instalar Py27 Openssl  Instalar Py27 Openssl Instalar Py27 Openssl

8 .. Una vez finalizado el proceso de compilación e instalación de la utilidad py-certbot. ejecute el siguiente comando para actualizar la herramienta a la última versión del paquete, como se ilustra en las capturas de pantalla a continuación.

# pkg install py27-certbot  Actualizar la herramienta Py-certbot  Actualizar la herramienta Py-certbot Actualizar la herramienta Py-certbot

9.. Para evitar algunos problemas que pueden ocurrir al obtener un certificado Let’s Encrypt. gratuito, el error más común es “ pkg_resources.DistributionNotFound. , haga 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: Instale el certificado Let’s 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 insinuar la bandera-d.

# certbot certonly–standalone-d tudominio.com. d www.tudominio.com.  Instalar Lets Encrypt for Nginx  Instalar Lets Encrypt para Nginx Instalar Lets Encrypt para Nginx

11.. Mientras genera el certificado, se le pedirá para ingresar su dirección de correo electrónico y para aceptar las condiciones de servicio de Let’s Encrypt. Escriba una en 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 desee compartir su dirección de correo electrónico, simplemente escriba no palabra en el mensaje y presione la tecla [enter]. para continuar. Una vez que los certificados para su dominio se hayan obtenido con éxito, recibirá algunas notas importantes que le informarán dónde se almacenan los certificados en su sistema y cuándo caducan.

 Permite cifrar resumen Permite cifrar resumen Resumen de Let’s Encrypt

12.. En caso de que desee obtener un certificado de Let’s Encrypt utilizando el complemento “ webroot. agregando el directorio webroot. del servidor Nginx para su dominio, emita el siguiente comando con los indicadores–webroot y-w. De forma predeterminada, si no ha cambiado la ruta de la raíz web de Nginx, debe ubicarse en la ruta del sistema /usr/local/www/nginx/.

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

Como en–strandalone procedimiento para obtener un certificado, el procedimiento de–webroot también le pedirá que proporcione una dirección de correo electrónico para la renovación del certificado y avisos de seguridad, que presione a para aceptar los términos y condiciones de Let’s Encrypt y no o sí para compartir la dirección de correo electrónico Let’s Cifre a los socios como se ilustra en el siguiente ejemplo.

Tenga en cuenta que el cliente de 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.

Ejemplo de Cerbot: Guardando el registro de depuración en/var/log/letsencrypt/letsencrypt.log Ingrese la dirección de correo electrónico (utilizada para renovaciones urgentes y avisos de seguridad) (Ingrese ‘c’ para cancelar): [email protected]/strong> #Se detectará una dirección de correo electrónico falsa. Parece haber problemas con esa dirección. Ingrese la dirección de correo electrónico (utilizada para renovaciones urgentes y avisos de seguridad) Si realmente desea omitir esto, puede ejecutar el cliente con–register-unsafely-without-email pero asegúrese de hacer una copia de seguridad de la clave de su cuenta desde/etc/letsencrypt/cuentas (ingrese ‘c’ para cancelar): [correo electrónico protegido]——————————————————————————-Lea los Términos de servicio en https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. Debe aceptar para registrarse con el servidor ACME en https://acme-v01.api.letsencrypt.org/directory——————————————————————————-(A) gree/(C) ancel: a——————————————————————————-Estaría dispuesto compartir su dirección de correo electrónico con Electronic Frontier Foundation, un socio fundador del proyecto Let’s Encrypt y la organización sin fines de lucro que desarrolla Certbot? Nos gustaría enviarle un correo electrónico sobre EFF y nuestro trabajo para cifrar la web, proteger a sus usuarios y defender los derechos digitales.——————————————————————————-(Y) es/(N) o: n Obtención de un nuevo certificado Realización de los siguientes desafíos: http-01 desafío para www.domain.com Usando la ruta webroot/usr/local/www/nginx/para todos los dominios no coincidentes. Esperando verificación … Desafíos de limpieza NOTAS IMPORTANTES:-¡Felicitaciones! Su certificado y cadena se han guardado en/usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Su certificado vencerá el 2017-12-28. Para obtener una versión nueva o modificada de este certificado en el futuro, simplemente ejecute certbot nuevamente. Para renovar * todos * sus certificados de forma no interactiva, ejecute “certbot renew”: las credenciales de su cuenta se han guardado en el directorio de configuración de Certbot en/usr/local/etc/letsencrypt. Debería hacer una copia de seguridad segura de esta carpeta ahora. Este directorio de configuración también contendrá certificados y claves privadas obtenidas por Certbot, por lo que es ideal realizar copias de seguridad periódicas de esta carpeta.-Si le gusta Certbot, considere apoyar nuestro trabajo al: Donar a ISRG/Let’s Encrypt: https://letsencrypt.org/donate Donar a EFF: https://eff.org/donate-le

Paso 4: Actualizar certificados TLS de Nginx

13.. La ubicación de los certificados y claves de Let’s Encrypt obtenidos en FreeBSD es /usr/local/etc/letsencrypt/live/www.yourdomain. com/ ruta del sistema. Emita 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/ La lista permite cifrar las claves SSL del dominio  Lista permite cifrar dominios SSL-Keys List Lets Encrypt Domain SSL-Keys

14.. Para instalar certificados 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 Nginx TL S, en caso de que sea un archivo separado, y modifique las líneas siguientes para reflejar la ruta de cifrado de los certificados emitidos como se ilustra a continuación.

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

Actualizar las siguientes líneas para lucir 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”;  Configurar SSL para Nginx  Configurar SSL para Nginx Configurar SSL para Nginx

15.. Además, si la línea ssl_dhparam. está presente en la configuración de Nginx SSL. debe generar una nueva clave Diffie – Hellman. de 2048. bits. 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 posibles errores de sintaxis y, luego, reinicie el servicio Nginx para aplicar la configuración SSL emitiendo los siguientes comandos.

# nginx-t # service nginx restart

17.. Confirme si el demonio Nginx está vinculando en el puerto 443. mediante emitiendo los siguientes comandos que pueden enumerar todos los sockets de red abiertos en el sistema en estado de escucha.

# netstat-an-p tcp | grep ESCUCHA # sockstat-4  Verify Nginx Ports  Verificar puertos Nginx Verificar puertos Nginx

18.. También puede visitar su dirección de dominio a través del protocolo HTTPS. abriendo un navegador y escriba la siguiente dirección para confirmar que los certificados de Let’s 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 puede también lo ayudará 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.  Verificar certificado SSL Verificar certificado SSL Verificar certificado SSL

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

reescribir ^ (. *) https://www.yourdomain.com$1 permanente;  Nginx Redirect HTTP to HTTPS  Nginx Redirigir HTTP a HTTPS Nginx Redirigir HTTP a HTTPS

20. La configuración de la renovación automática para los certificados emitidos por la autoridad Let’s Encrypt antes de que caduquen se puede realizar programando un trabajo cron para que se ejecute una vez al día emitiendo el siguiente comando.

# crontab-e

Tarea cron para renovar el certificado .

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

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