En esta guía, discutiremos cómo asegurar Nginx servidor web en FreeBSD con TLS/SSL certificados ofrecidos por la autoridad de certificación de Let's Encrypt . También le mostraremos cómo renovar automáticamente los certificados de Lets' Encrypt antes de la fecha de vencimiento.
TLS , un acrónimo de Seguridad de la capa de transporte , es un protocolo que se ejecuta bajo HTTP y utiliza certificados y claves para encapsular los paquetes y cifrar los datos intercambiados entre un servidor y un cliente, o en este caso entre Nginx servidor web 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.
Lea también :Instale Let's Encrypt para Apache en FreeBSD
El proceso para obtener un Let's Encrypt gratuito certificado en FreeBSD se puede simplificar mucho instalando certboot utilidad de cliente, que es el cliente oficial de Let's Encrypt utilizado para generar y descargar certificados.
Requisitos
- Instalar pila FBEMP (Nginx, MariaDB y PHP) en FreeBSD
Paso 1:configurar Nginx TLS/SSL
Para activar el TLS servidor en Nginx , abra nginx.conf archivo de configuración, busque la línea que define el inicio de SSL servidor y actualice todo el bloque para que se vea como en el ejemplo a continuación.
# nano /usr/local/etc/nginx/nginx.conf
Extracto del bloque Nginx HTTPS:
Nginx HTTPS Configurationserver { 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 de SSL bloque, también contiene algunas declaraciones para habilitar la compresión gzip y FastCGI Process Manager , utilizado para pasar código PHP a PHP-FPM puerta de enlace para ejecutar aplicaciones web dinámicas.
Después de haber agregado el código anterior a Nginx archivo de configuración principal, no reinicie el daemon ni aplique la configuración antes de instalar y obtener un Let's Encrypt certificado para su dominio.
Paso 2:Instale el cliente Certbot en FreeBSD
# cd /usr/ports/security/py-certbot # make install clean
Además, aparecerá una serie de indicaciones en su pantalla, exigiéndole que seleccione qué paquetes se utilizarán en el momento de la compilación para cada dependencia. En la primera pantalla, seleccione las siguientes herramientas presionando [espacio] clave, para compilar python27 dependencia, como se ilustra en la siguiente imagen.
- IPV6
- LIBFFI
- NLS
- PYMALLOC
- HILOS
- UCS4 para compatibilidad con Unicode
# pkg install py27-certbot
# pkg install py27-salt # pkg install py27-acme
Paso 3:Instale el certificado Let's Encrypt para Nginx en FreeBSD
-d
bandera.
# certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
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 desee compartir su dirección de correo electrónico, escriba no
palabra en el aviso y presione [enter] clave para continuar. Una vez que se hayan obtenido correctamente los certificados para su dominio, recibirá algunas notas importantes que le informarán dónde se almacenan los certificados en su sistema y cuándo caducan.
--webroot
y -w
banderas De forma predeterminada, si no ha cambiado la ruta webroot de Nginx, debe estar ubicada en /usr/local/www/nginx/ ruta del sistema.
# certbot certonly --webroot -w /usr/local/www/nginx/ -d yourdomain.com -d www.yourdomain.com
Como en el --strandalone
procedimiento para obtener un certificado, el --webroot
El procedimiento también le pedirá que proporcione una dirección de correo electrónico para la renovación del certificado y los avisos de seguridad, presione a
estar de acuerdo con los términos y condiciones de Let's Encrypt y no
o yes
compartir o no la dirección de correo electrónico de los socios de Let's Encrypt como se ilustra en el siguiente ejemplo.
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.
Muestra de cerbot:
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:actualice los certificados TLS de Nginx
# ls /usr/local/etc/letsencrypt/live/www.yourdomain.com/
# 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";
# openssl dhparam –out /usr/local/etc/nginx/dhparam.pem 2048
# nginx -t # service nginx restart
# netstat -an -p tcp| grep LISTEN # sockstat -4
https://www.yourdomain.com
# openssl s_client -connect www.yourdomain.com:443
En caso de que quiera obligar 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 de Nginx, localice la directiva del servidor para el puerto 80 y agregue la siguiente línea después de la instrucción server_name como se ilustra en el siguiente ejemplo.
rewrite ^(.*) https://www.yourdomain.com$1 permanent;
# crontab -e
Tarea cron 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 mediante certificados gratuitos de Let's Encrypt.