GNU/Linux >> Tutoriales Linux >  >> Cent OS

SSL gratis para Nginx en Centos por Let's encrypt

Resumen

Let's encrypt es una autoridad de certificación que proporciona una forma sencilla de obtener un certificado SSL/TLS para su sitio web de forma gratuita, lo que permite cifrar https en los servidores web. Let's Encrypt simplifica la adquisición e instalación del certificado SSL utilizando un software llamado CertBot. Este cliente de software sirve un proceso totalmente automatizado para servidores web apache. Sin embargo, los certificados SSL gratuitos de Let's Encrypt se pueden instalar manualmente en cualquier servidor web con algunos ajustes internos.

En este tutorial, demostraremos el procedimiento de uso del certbot-auto Cliente de Let's Encrypt para obtener un certificado SSL gratuito y usarlo con Nginx en Ubuntu 14.04. Este tutorial también le explicará cómo renovar automáticamente su certificado SSL. Si está ejecutando un servidor web diferente, simplemente siga la documentación de su servidor web para aprender a usar el certificado con su configuración.

Requisito previo

  • Usuario no root con privilegios de Sudo
  • Debe poseer o tener control administrativo sobre el dominio para el que desea adquirir el certificado SSL.
  • Un registro A creado en el panel de DNS, que dirige su dominio a la dirección IP pública de su servidor. Esto es necesario debido a cómo Let's Encrypt valida que es el propietario del dominio para el que emite un certificado. Por ejemplo, si desea obtener un certificado para example.com , ese dominio debe resolverse en su servidor para que funcione el proceso de validación. Nuestra configuración usará example.com y www.example.com como los nombres de dominio, por lo que se requieren ambos registros DNS

Paso 1:instalar el cliente Let's Encrypt

Inicialmente, debe descargar el cliente de software CertBot en su servidor. Puede descargar CertBot desde el sitio web oficial de EFF.

Descargue el software  CertBot en el directorio /usr/local/sbin directory on your server:

cd /usr/local/sbin
sudo wget https://dl.eff.org/certbot-auto
$ cd /usr/local/sbin   
sudo wget https://dl.eff.org/certbot-auto
[sudo] password for example: 
--2016-11-28 13:26:28--  https://dl.eff.org/certbot-auto
Resolving dl.eff.org... 173.239.79.196
Connecting to dl.eff.org|173.239.79.196|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 44442 (43K) [text/plain]
Saving to: `certbot-auto'

100%[======================================>] 44,442       154K/s   in 0.3s    

2016-11-28 13:26:30 (154 KB/s) - `certbot-auto' saved [44442/44442]

Cert-Bot ahora se descarga en /usr/local/sbin en su servidor. Ahora haga que el archivo sea ejecutable ingresando el siguiente comando:

sudo chmod a+x /usr/local/sbin/certbot-auto

El software Cerbot-auto ahora está listo para ser instalado.

Paso 2:obtener un certificado

Hay varias formas de obtener un certificado SSL de Let's Encrypt a través de varios complementos. Debe obtener un complemento de autenticación para adquirir un certificado SSL. Asegúrese de que estos complementos solo obtendrán el certificado y debe instalar el certificado manualmente.

En este tutorial, usemos un complemento llamado Webroot para la autenticación.

Complemento Webroot

El complemento Webroot genera un archivo exclusivo en el directorio / .well-known dentro de la raíz de su documento, al que Let's Encrypt puede acceder a través de su servidor web y esto completará la validación de su autoridad sobre el dominio. Es posible que deba configurar el permiso para el archivo en / .well-known.

Si aún no ha instalado Ngnix, use los siguientes comandos para instalarlo:

sudo yum update
sudo yum install ngnix

Para que el archivo sea accesible para certbot-auto, realicemos algunos cambios necesarios en el archivo de configuración de Nginx. El archivo de configuración de ngnix se encuentra en el directorio /etc/nginx/sites-disponible/default, de forma predeterminada. Editemos el archivo de configuración:

sudo vim /etc/nginx/sites-available/default

Agregue el siguiente bloque de ubicación al archivo:

Agregar al bloque de servidor SSL
server {
        . . .

        location ~ /.well-known {
                allow all;
        }

        . . .
}

También querrá buscar en qué está configurada la raíz de su documento buscando la root directiva, ya que se requiere la ruta para usar el complemento Webroot. Si está utilizando el archivo de configuración predeterminado, la raíz será /usr/share/nginx/html .

Guarde el archivo presionando Esc seguido de :wq! y presiona la tecla enter.

Puede comprobar el archivo de configuración en busca de errores de sintaxis:

sudo nginx -t

Si encuentra el archivo de configuración libre de errores de sintaxis, reinicie el servicio ngnix

sudo service nginx restart

Ahora, podemos usar el complemento webroot para la validación, ya que sabemos la ubicación exacta de la ruta webroot. Use el siguiente comando para solicitar un certificado SSL usando el complemento webroot:

certbot-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com

Los nombres de dominio deben especificarse con -d opción. Si desea que un único certificado funcione con varios nombres de dominio (por ejemplo, example.com y www.ejemplo.com ), asegúrese de incluirlos todos, comenzando con el dominio de nivel más alto (por ejemplo, example.com ).

Nota: El certbot-auto el software requiere privilegios de superusuario, por lo que se le pedirá que ingrese su contraseña si no ha usado sudo hace poco.

Cuando certbot-auto se inicializa, se le solicitará cierta información. Las indicaciones exactas pueden variar dependiendo de si ha utilizado el certbot-auto cliente antes. Proporcione la información necesaria y seleccione aceptar al final.

Salida:
IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to [email protected]
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your
   cert will expire on 2016-03-15. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.
 - Your account credentials have been saved in your Let's Encrypt
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Let's
   Encrypt so making regular backups of this folder is ideal.
 - If like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Tenga en cuenta la ruta y la fecha de caducidad de la salida.

Nota sobre el cortafuegos: Si recibe un error como Failed to connect to host for DVSNI challenge , es posible que deba configurar el firewall de su servidor para permitir el tráfico TCP en el puerto 80 y 443 .

Nota: Si su dominio se enruta a través de un servicio DNS como CloudFlare, deberá desactivarlo temporalmente hasta que haya obtenido el certificado.

Archivos de certificado

Después de obtener el certificado, tendrá los siguientes archivos codificados con PEM:

  • cert.pem: El certificado de tu dominio
  • cadena.pem: El certificado de cadena Let's Encrypt
  • cadena completa.pem:cert.pem y cadena.pem combinado
  • clave privada.pem: La clave privada de su certificado

Puede comprobar que los archivos existen ejecutando este comando (sustituyendo su nombre de dominio):

sudo ls -l /etc/letsencrypt/live/your_domain_name

La salida debe ser los cuatro archivos de certificado mencionados anteriormente. En un momento, configurará su servidor web para usar fullchain.pem como archivo de certificado y privkey.pem como archivo de clave de certificado.

Generar grupo fuerte Diffie-Hellman

Para aumentar aún más la seguridad, genere un grupo fuerte de Diffie-Hellman usando el comando:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

La ruta del grupo DH sería /etc/ssl/certs/dhparam.pem 2048

Paso 3:configurar TLS/SSL en el servidor web (Nginx)

Ahora debes configurar tu servidor web Nginx para usarlo. Edite la configuración de Nginx que contiene su bloque de servidor:

sudo nano /etc/nginx/sites-available/default

Encuentra el server cuadra. Comentar o eliminar las líneas que configuran este bloque de servidor para escuchar en el puerto 80. En la configuración predeterminada, estas dos líneas deben eliminarse:

Eliminaciones de configuración de Nginx
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

Vamos a configurar este bloque de servidor para escuchar en el puerto 443 con SSL habilitado en su lugar. Dentro de su server { bloque, agregue las siguientes líneas pero reemplace todas las instancias de example.com con dominio propio:

Adiciones a la configuración de Nginx:1 de 3
        listen 443 ssl;

        server_name example.com www.example.com;

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

Esto permite que su servidor use SSL y le dice que use el certificado Let's Encrypt SSL que obtuvimos anteriormente.

Para permitir solo los cifrados y protocolos SSL más seguros, y usar el sólido grupo Diffie-Hellman que generamos, agregue las siguientes líneas al mismo bloque de servidor:

Adiciones a la configuración de Nginx:2 de 3
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_stapling on;
        ssl_stapling_verify on;
        add_header Strict-Transport-Security max-age=15768000;

Por último, fuera del bloque de servidor original (que está escuchando en HTTPS, puerto 443), agregue este bloque de servidor para redirigir HTTP (puerto 80) a HTTPS.

Adiciones a la configuración de Nginx:3 de 3
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Guardar y salir.

Pruebe el archivo de configuración en busca de errores de sintaxis escribiendo:

sudo nginx -t

Una vez que haya verificado que no hay errores de sintaxis, aplique los cambios reiniciando Nginx:

sudo service nginx restart

El certificado TLS/SSL de Let's Encrypt ya está en su lugar. En este punto, debe probar que el certificado TLS/SSL funciona visitando su dominio a través de HTTPS en un navegador web.

Puede usar el informe de Qualys SSL Labs para ver cómo califica la configuración de su servidor:

En un navegador web:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com

Esta configuración de SSL debería reportar una A+ calificación.

Paso 4:configurar la renovación automática

Los certificados de Let's Encrypt son válidos durante 90 días, pero se recomienda renovar los certificados cada 60 días para permitir un margen de error. En el momento de escribir este artículo, la renovación automática aún no está disponible como una función del propio cliente, pero puede renovar manualmente sus certificados ejecutando certbot-auto cliente con renew opción.

Para activar el proceso de renovación de todos los dominios instalados, ejecute este comando:

certbot-auto renew

Debido a que recientemente instalamos el certificado, el comando solo verificará la fecha de vencimiento e imprimirá un mensaje informando que el certificado aún no debe renovarse. El resultado debería ser similar a esto:

Salida:
Checking for new version...
Requesting root privileges to run letsencrypt...
   /home/sammy/.local/share/letsencrypt/bin/letsencrypt renew
Processing /etc/letsencrypt/renewal/example.com.conf

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/example.com/fullchain.pem (skipped)
No renewals were attempted.

Tenga en cuenta que si creó un certificado combinado con varios dominios, solo se mostrará el nombre de dominio base en el resultado, pero la renovación debería ser válida para todos los dominios incluidos en este certificado. .

Una forma práctica de asegurarse de que sus certificados no se queden obsoletos es crear un trabajo cron que ejecutará periódicamente el comando de renovación automática por usted. Dado que la renovación comprueba primero la fecha de caducidad y solo ejecuta la renovación si faltan menos de 30 días para la caducidad del certificado, es seguro crear un trabajo cron que se ejecute todas las semanas o incluso todos los días, por ejemplo.

Vamos a editar el crontab para crear un nuevo trabajo que ejecutará el comando de renovación cada semana. Para editar el crontab para el usuario root, ejecute:

sudo crontab -e

Agregue las siguientes líneas:

entrada crontab
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reload

Guardar y salir. Esto creará un nuevo trabajo cron que ejecutará certbot-auto renew comando todos los lunes a las 2:30 a. m. y recargar Nginx a las 2:35 a. m. (para que se use el certificado renovado). La salida producida por el comando se canalizará a un archivo de registro ubicado en /var/log/le-renewal.log .


Cent OS
  1. Cómo instalar un certificado SSL en Apache para CentOS 7

  2. Protección de ISPConfig 3.1 con un certificado SSL gratuito de Lets Encrypt

  3. Let's Encrypt:obtenga un certificado SSL gratuito con Certbot

  4. Asegure Apache con Let's Encrypt en CentOS 7 - ¿Proceso paso a paso?

  5. Cómo obtener un certificado SSL gratuito con SSL It! y Let's Encrypt en Plesk

Cómo instalar un certificado SSL gratuito para Apache en CentOS 8

Cómo instalar un certificado SSL gratuito para Nginx en CentOS 8

¿Cómo habilito Let's encrypt Free SSL Certificate para mi dominio en Plesk?

Proteja Nginx con el certificado Let's Encrypt SSL en Ubuntu 18.04

Cómo proteger Nginx con el certificado SSL de Let's Encrypt

Cómo proteger Nginx con Let's Encrypt en CentOS 8