Instalar y Configurar Let’s Encrypt

Hola mundo,

Finalmente y después de tanta espera, Let’s Encrypt ha entrado en fase de Public Beta, es decir ya cualquiera que desee probarlo puede entrar y generar sus certificados.

Para quienes no conozcan que es Let’s Encrypt, es una nueva Autoridad de Certificación, abierta y gratis. Es administrado por la Internet Security Research Group (ISRG), y es patrocinado por las mas importantes Fundaciones de Internet, tales como la EFF, Mozilla, y también por grandes empresas como Cisco, Facebook, Ident Trust, Internet Society, entre otros.

La idea de Let’s Encrypt es que cualquiera tiene derecho de poder ofrecer seguridad a través de la encriptación (HTTPS) en sus sitios web, antes de la llegada de Let’s Encrypt, uno tenía que pagar a una Autoridad de certificación tales como Symantec, GoDaddy, DigiCert, Verizon, etc… cierta cantidad desde unos cientos y hasta los miles de USD dependiendo el nivel de certificación deseada.

Pero para la mayoría de usuarios un certificado de validación de nombre de dominio es mas que suficiente y esto es lo que ofrece Let’s Encrypt, que tus usuarios tengan plena seguridad de que los datos que viajan desde su máquina a tu servidor/sitio no puede ser leída por nadie mas, pues el certificado sólo puede provenir del servidor donde reside el dominio auténtico y no de un suplantador (ó de una agencia de espionaje cofcofNSAcofcof)

 

Instalación

Primero que nada, todo lo siguiente debes correrlo en el servidor en donde residen los dominios para los que quieres generar los certificados, pues Let’s Encrypt debe poder escribir ciertos archivos en su WebRoot (a.k.a. DocumentRoot) para poder validar efectivamente que eres el dueño del dominio y tienes control sobre él.

Paso 1, Debes tener Git instalado y clonar el depósito:

user@webserver:~$ git clone https://github.com/letsencrypt/letsencrypt.git

Paso 2, Córrelo una vez para que pueda instalar todas sus dependencias (la mayoría bibliotecas en python), por tanto debes tener privilegios de administrador ya sea acceso a root directo o por medio de sudo, posteriormente generará una nueva llave privada y con el email que le especifiques creará una nueva cuenta para ti en los servidores de Let’s Encrypt, todo esto es un proceso automático. NOTA: De momento no le especifiques ningún dominio.


root@webserver:~$ cd letsencrypt
root@webserver:~/letsencrypt$ ./letsencrypt-auto --email tudireccion@deemail.com --agree-tos

Paso 3, Let’s Encrypt tiene plugins para poder leer archivos de configuración de Apache, saber que dominios tienes, donde están y modificar estas configuraciones para añadir los certificados de manera automágica, pero esto es un grave problema para los que tenemos servidores web con algún tipo de panel de control que genera sus propias configuraciones y sobreescribirían los cambios hechos por Let’s Encrypt, otra opción es que dejes a Let’s encrypt levantar un web server standlone, pero esto implica que debes detener tu web server principal.

En mi caso estos 2 primeros métodos no son una opción, así que me fuí por la tercera, puedes darle a Let’s Encrypt el path al DocumentRoot de tu dominio para que realice la validación con unos archivos especiales que debe guardar allí. Aclarado esto, digamos que tienes tus dominios en /var/www/$dominio, por ejemplo /var/www/fulanito.com, correríamos lo siguiente:


root@webserver:~/letsencrypt$ ./letsencrypt-auto certonly --webroot -w /var/www/fulanito.com/ -d fulanito.com

¡Y listo!, generará automáticamente tu CSR (Certificate Signing Request), lo firmará, lo enviará a los servidores de Let’s Encrypt, estos validará que existan los archivos en fulanito.com/.well-known/acme-challenge/ y de ser así devolverá el certificado firmado. Se generarán 4 archivos en /etc/letsencrypt/live/fulanito.com/


root@webserver:~# ls /etc/letsencrypt/live/fulanito.com/
cert.pem  chain.pem  fullchain.pem  privkey.pem

Los cuales contienen:

  • cert.pem – contiene el certificado firmado
  • chain.pem – certificado “intermedio”
  • fullchain.pem – contiene ambos cert.pem y chain.pem, para los servicios que soporten este formato
  • privkey.pem – la llave privada del certificado

Configurar el webserver (Apache y NginX)

Esto sería lo único a añadir en tu virtualhost de Apache, (si antes no usabas SSL, asegúrate de activar los módulos y habilitar el virtualhost de SSL que contiene las entradas para el puerto 443)


<VirtualHost ww.xx.yy.zz:443>
        ...
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/fulanito.com/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/fulanito.com/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/fulanito.com/chain.pem
        ...
</VirtualHost>

Y para NginX, algo como lo siguiente:


server {
    listen      ww.xx.yy.zz:443;
    server_name fulanito.com www.fulanito.com;
    ssl         on;
    ssl_certificate      /etc/letsencrypt/live/fulanito.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/fulanito.com/privkey.pem;
    ...

Y eso es todo, espero este artículo les sirva en algo y les ayude a brindar mas seguridad a sus sitios web. Como ven es bastante fácil utilizar Let’s Encrypt.

Sólo resta mencionar que quienes tienen su hosting/cloud server/dedicado con ideaslabs.com pueden solicitar su certificado gratis y se les será configurado casi al instante sin costo alguno ;)

Saludos!

15 comments

  1. Hola John,

    Usarías el modo manual

    ./letsencrypt-auto certonly -a manual -d example.com

    De esta forma el script te pedirá que pongas cierto texto en cierto path dentro de tu webroot, es decir, tendrías que conectarte vía SSH/SCP/sFTP a tu shared hosting, y crear los archivo que te vaya diciendo, y editándolos con el contenido que también te va a indicar.

    Una vez finalizado ese proceso Let’s Encrypt checará que estén todos los archivos en tu dominio, y lo validará, terminado esto, puedes borrar los archivos.

    Saludos!

  2. Hola !! soy novato pero quiero utilizar let’s encrypt para mi xampp local utilizo windows pero ne como empezar sera que exista la posibilidad de que me ayudes a conseguir configurar mi xampp con let encrypt, porfavor

  3. Para desarrollo local no necesitas un certificado firmado. Si lo que quieres es poner un servidor casero, entonces necesitas varias cosas antes de pensar en el certificado, como tener un dominio que apunte a una ip pública en tu home server (dinámica o fija), hay muchos tutoriales en internet sobre como hacer todo eso… ya cuando tengas listo tu homeserver con dominio e ip pública sigues la guía de let’s encrypt normal.

  4. Hola Marcos, tendrias un paso a paso, para entrar al archivo del servidor y modificarlo, lo que dispongo es el acceso a ftp del servidor, existe algun fichero de alli y modificar para que funcione o cargue manualmente el archivo sin usar la consola linux.

  5. Hola Andres,
    No, los certificados se manejan con usuario root, si no tienes tu propio server y es shared hosting entonces el proveedor debe darte la opción de editar tus certificados vía su panel de control.
    Saludos.

  6. Muy buen info, gracias, para la ultima opción seria ejecutar:
    user@webserver:~$ git clone https://github.com/letsencrypt/letsencrypt.git
    y luego
    root@webserver:~/letsencrypt$ ./letsencrypt-auto certonly –webroot -w /var/www/fulanito.com/ -d fulanito.com
    Solo faltaría agregarle a los vhosts las SSL, es correcto?
    Otra consulta, se pueden instalar los certificados en un directorio distinto al del dominio?
    Gracias

  7. Hola como estas , soy nuevo pero despues que compre un certificado de SSL en Godaddy en WordPress no puedo editar o insertar mas datos en mi pagina ademas no apareces el sello de seguridad

    Que hago para resolver este problema de WordPress para poder entrar y modificar mi pagina

    También tengo otro dominio lo cual me gustaría utilizar let’s encrypt gratis para el sello de seguridad como hago cual son los pasos
    gracias

  8. Hola Claudio,
    Así es, tal cual dice el texto, posteriormente realizas la configuración de tu web server con el ssl y llave correspondiente.
    Los certificados se guardan en /etc/letsencrypt/live si recuerdo bien (ahora uso otro cliente de letsencrypt). De cualquier manera al terminar de correr el script éste te indica en donde queadaron guardados los certificados y la llave. Los certificados NUNCA se guardan en el mismo lugar que tu espacio público (httdocs, public_html, etc)
    Saludos.

  9. Hola Valentín,

    De tu wordpress no sé decirte, necesitas buscar un rato en google, lo mas seguro es que tengas que cambiar el site_url en la BD.
    Sobre como usar Let’s Encrypt, pues aquí en este post están los pasos. Si estás en un shared hosting necesitas correrlo de manera manual (lee los anteriores comentarios) y seguir las instrucciones que te indique el script.

    Saludos!

  10. Hola, uso Xpress Hosting y acabo de crear un certificado desde el cpanel, pero me dice que es un certificado autfirmado, y necesitaria validarlo con una entidad de certificacion valida, en este caso quiero que sea Let’s Encrypt pero no entiendo como puedo hacerlo o si es posible hacerlo. O debo crear los certificados como lo pones en el ejemplo y despues subirlos a mi hosting?

    Gracia por el aporte!

  11. Hola Angel y Vicente

    Deben usar el modo manual:
    ./letsencrypt-auto certonly -a manual -d example.com
    Y siguen las instrucciones… esto lo deberán hacer cada 3 meses… otro modo sería usar el modo DNS, entonces se debe crear el registro que indique (de tipo TXT) con el contenido que también se indica.

    Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *