HTTPS https://www.carloscarrascal.com/ es HTTPS con un certificado gratuito de letsencrypt.org y Certbot https://www.carloscarrascal.com/blog/https-con-un-certificado-gratuito-de-letsencryptorg-y-certbot <article data-history-node-id="16" class="node node--type-blog-post node--view-mode-rss group-one-column ds-2col-stacked-fluid clearfix"> <div class="group-header"> <div class="field field--name-node-title field--type-ds field--label-hidden field--item"><h1> HTTPS con un certificado gratuito de letsencrypt.org y Certbot </h1> </div> <div class="field field--name-node-post-date field--type-ds field--label-hidden field--item">Lunes, Febrero 27, 2017 - 22:03</div> </div> <div class="group-left"> <div class="field field--name-field-tags field--type-entity-reference field--label-hidden field--items"> <div class="field--item"><a href="/tags/linux" hreflang="es">Linux</a></div> <div class="field--item"><a href="/tags/debian" hreflang="es">Debian</a></div> <div class="field--item"><a href="/tags/servicios" hreflang="es">Servicios</a></div> <div class="field--item"><a href="/tags/ssl" hreflang="es">SSL</a></div> <div class="field--item"><a href="/tags/https" hreflang="es">HTTPS</a></div> </div> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><p><em>Let’s Encrypt</em> es una autoridad certificadora (CA) abierta, gratuita, y libre. Llevan funcionando menos de un año, desde 2016, y se puede decir que es un servicio público, dirigido a promover y facilitar la obtención y configuración de certificados de seguridad para la web. Lo que ofrecen son certificados X.509 por dominio que podemos usar para TLS.</p> <p><a href="https://letsencrypt.org/" target="_blank">https://letsencrypt.org/</a></p> <p>Hay varias organizaciones involucradas en el proyecto, siendo la principal la <a href="https://en.wikipedia.org/wiki/Internet_Security_Research_Group" target="_blank">Internet Security Research Group (ISRG)</a>, junto a otras como <a href="https://es.wikipedia.org/wiki/Fundaci%C3%B3n_Linux" target="_blank">Linux Foundation</a> o <a href="https://es.wikipedia.org/wiki/Fundaci%C3%B3n_Mozilla" target="_blank">Mozilla Foundation</a>, pero también gigantes como Akamai o Cisco Systems. Es decir, que hay gente grande detrás, y el proyecto es bastante interesante, esperemos que dure.</p> <p>Hasta ahora conseguir un certificado de seguridad para configurar HTTPS como es debido era bastante engorroso, además de que solía ser bastante caro. Últimamente los precios habían comenzado a bajar, pero ahora podemos conseguir un certificado propio por la cara, y con una instalación muy sencilla.</p> <p>La principal ventaja del servicio se basa en la automatización de todo el proceso. El objetivo es configurar un servidor HTTPS y obtener un certificado de confianza para los navegadores sin intervención humana. Y dejarme deciros que me ha funcionado de verdad, y a la primera. </p> <p>Esta automatización es la clave de todo el asunto, primero porque los certificados que nos ofrecen solamente son válidos por 90 días, lo que nos va a obligar a configurar la renovación de forma automática si no queremos estar cada tres meses renovando el certificado de forma manual.</p> <p>Para esto han ideado un protocolo llamado ACME (<a href="https://en.wikipedia.org/wiki/Automated_Certificate_Management_Environment" target="_blank">Automated Certificate Management Environment</a>), y el truco consiste en instalar un agente que se encargue de realizar automáticamente la petición y renovación del certificado, validando el solito nuestros dominios. Tenemos unos cuantos disponibles, pero el que recomiendan desde letsencrypt.org es <em>Certbot</em>:</p> <p><a href="https://certbot.eff.org" target="_blank">https://certbot.eff.org</a></p> <p><em>Certbot</em> esta empaquetado en los repos de Debian, pero deberemos usar el repositorio de <a href="https://backports.debian.org/Instructions/" target="_blank">backports</a>. Para ello basta con incluir una línea en nuestro fichero <em>/etc/apt/sources.list</em>. Si estáis usando Jessie (Debian 8) será:</p> <pre> deb http://ftp.debian.org/debian jessie-backports main</pre> <p>Después actualizamos:</p> <pre> apt-get update</pre> <p>Ahora ya podemos instalar el cliente de <em>Certbot</em>:</p> <pre> $ sudo apt-get install python-certbot-apache -t jessie-backports </pre> <p>Una vez instalado, ya podemos ejecutarlo, si estamos usando Apache, así:</p> <pre> $ certbot --apache</pre> <p>Y ya está. Lo juro. El instalador nos hará una serie de preguntas sobre los certificados que queremos instalar y listo. En mi caso tenia un Apache2 con varios VirtualHosts con diferentes nombres de dominio y alias, todos por el puerto 80. El instalador hizo solito todo esto:</p> <ul> <li>Realizo una copia de cada fichero de configuración de VirtualHost, añadiendo -le-ssl.conf al nombre, y configuró en ellos el certificado.</li> <li>En cada VirtualHost original, añadió una redirección automática a su versión de HTTPS</li> <li>Configuró un servicio en Cron <em>/etc/cron.d/certbot</em> para realizar automáticamente la renovación de los certificados.</li> <li>Reinicio el servidor Apache para cargar la nueva configuración.</li> </ul> <p>Si no os hace mucha gracia que os toque la configuración, o tenéis algo realmente chungo montado, también podemos hacer que solamente consiga el certificado, y configurarlo nosotros a mano, así:</p> <pre> $ certbot --apache certonly</pre> <p>En mi caso, añadió las siguientes líneas a mis archivos de VirtualHost originales en el 80:</p> <pre> RewriteEngine on RewriteCond %{SERVER_NAME} =xxxxx.com [OR] RewriteCond %{SERVER_NAME} =www.xxxxx.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </pre> <p>Los nuevos ficheros para SSL que creó Certbot son copias de los que yo tenía, en los que se añade la configuración del certificado:</p> <pre> SSLCertificateFile /etc/letsencrypt/live/xxxxxxx/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/xxxxxxxx/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf</pre> <p>Y este es el archivo que añade al Cron en <em>/etc/cron.d/certbot</em> para automatizar la renovación de los certificados:</p> <pre> # /etc/cron.d/certbot: crontab entries for the certbot package # # Upstream recommends attempting renewal twice a day # # Eventually, this will be an opportunity to validate certificates # haven't been revoked, etc. Renewal will only occur if expiration # is within 30 days. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system &amp;&amp; perl -e 'sleep int(rand(3600))' &amp;&amp; certbot -q renew </pre> <p>Podemos hacer una simulación del proceso de renovación de los certificados con este comando:</p> <pre> certbot renew --dry-run </pre> <p>Esto nos dará una idea de si funcionará o no cuando lo tenga que hacer el solo.</p> <p>De momento, está funcionando perfectamente. Ya veremos cuando llegue la primera renovación...</p> <p> </p> <h2>Referencias</h2> <ul> <li>Proceso de como funciona completo: <a href="https://letsencrypt.org/how-it-works/" target="_blank">https://letsencrypt.org/how-it-works/</a></li> <li>Porque 90 días: <a href="https://letsencrypt.org/2015/11/09/why-90-days.html" target="_blank">https://letsencrypt.org/2015/11/09/why-90-days.html</a></li> <li>Lista de clientes soportados: <a href="https://community.letsencrypt.org/t/list-of-client-implementations/2103" target="_blank">https://community.letsencrypt.org/t/list-of-client-implementations/2103</a></li> <li><a href="https://es.wikipedia.org/wiki/Let%27s_encrypt" target="_blank">Let's Encrypt en Wikipedia</a></li> <li><a href="https://backports.debian.org/Instructions/" target="_blank">​Debian backports</a></li> <li><a href="https://certbot.eff.org/#debianjessie-apache" target="_blank">How to install Certbot</a></li> </ul> </div> </div> <div class="group-footer"> <section> <h2>Añadir nuevo comentario</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=16&amp;2=comment&amp;3=comment" token="EB6QcaYCufqwNDXs6N9Q8dAWj4FsozjpCPYWAbAx0pc"></drupal-render-placeholder> </section> </div> </article> Mon, 27 Feb 2017 21:03:16 +0000 root 16 at https://www.carloscarrascal.com