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
ywww.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 SSLserver {
. . .
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 ).
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
.
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:
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:
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 3server {
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 crontab30 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
.