{"id":535,"date":"2019-02-15T15:05:24","date_gmt":"2019-02-15T14:05:24","guid":{"rendered":"https:\/\/tiraquelibras.com\/blog\/?p=535"},"modified":"2020-09-21T12:48:18","modified_gmt":"2020-09-21T10:48:18","slug":"lets-encrypt-con-nginx-en-raspberry-2b","status":"publish","type":"post","link":"https:\/\/blog.tiraquelibras.com\/?p=535","title":{"rendered":"Let&#8217;s Encrypt con Nginx en Raspberry Pi (Raspbian)"},"content":{"rendered":"\n<p><span class=\"has-inline-color has-vivid-red-color\"><strong>ACTUALIZADO 21\/09\/2020<\/strong><\/span>. Parece ser que <em>Certbot<\/em> ya no est\u00e1 disponible para<em> Debian 8 Jessie<\/em>, ya no aparece en el desplegable de la <a rel=\"noreferrer noopener nofollow\" href=\"https:\/\/certbot.eff.org\/\" data-type=\"URL\" data-id=\"https:\/\/certbot.eff.org\/\" target=\"_blank\" class=\"external external_icon\">web oficial<\/a> para su descarga. Tampoco est\u00e1 disponible el repositorio que agregamos manualmente para la instalaci\u00f3n del software, por lo que solo ser\u00e1 compatible con versiones de <em>Debian <\/em>superiores a la 9, inclusive, en donde figura este software dentro de los repositorios oficiales.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>Uno de los problemas a los que se deben de enfrentar todas aquellas personas con un servicio web sin cifrar, corriendo bajo el protocolo <strong>HTTP<\/strong> y con datos que no deben de ser transmitidos en texto plano, es el de habilitar el protocolo seguro <strong>HTTPS<\/strong>. Es m\u00e1s, ahora todas las p\u00e1ginas web, ya sean est\u00e1ticas o no, van a tener que correr bajo el protocolo seguro tras la decisi\u00f3n que <em>Google<\/em> va a aplicar sobre su navegador <em>Chrome<\/em> y la clasificaci\u00f3n de las webs sin <strong>HTTPS<\/strong>.<\/p>\n\n\n\n<p>El mayor inconveniente era encontrar una entidad certificadora que emitiera certificados baratos, para su uso en servicios web dom\u00e9sticos, como un almacenamiento en la nube o un servidor de correo con acceso web desde un equipo instalado en tu propia casa. En estos casos gastar una media de 100\u20ac en un certificado no compensa para este escenario, y dar con certificados baratos no es tarea f\u00e1cil. De momento para este blog, y para otros servicios web alojados en el sal\u00f3n de mi casa, se est\u00e1n usando los certificados de <strong>Comodo<\/strong> adquiridos a trav\u00e9s de <strong>Namecheap<\/strong>&nbsp;(web oficial pincha <a href=\"https:\/\/www.namecheap.com\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>) los cuales ofrecen un certificado <strong>SSL\/TLS<\/strong> por 6\u20ac al a\u00f1o. Pero este escenario va a cambiar con la llegada de <em><strong>Let&#8217;s Encrypt<\/strong><\/em>.<\/p>\n\n\n\n<p>Hace algo m\u00e1s de un a\u00f1o intent\u00e9 instalar esta entidad en un servidor para poder gestionar este tipo de certificados, pero tras varias horas de pelearme con errores, dependencias imposibles y desesperaci\u00f3n decid\u00ed abortar la misi\u00f3n. Hoy en d\u00eda ya no es necesaria tanta complejidad, siendo una tarea tremendamente sencilla.<\/p>\n\n\n\n<p>Vamos al lio!!!<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_76 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Tabla de contenidos<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a00b8ff6387f\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a00b8ff6387f\"  aria-label=\"Alternar\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#%C2%BFQue_es_Lets_Encrypt\"  rel=\"nofollow\" target=\"_blank\">\u00bfQu\u00e9 es Let&#8217;s Encrypt?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-2 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Escenario\"  rel=\"nofollow\" target=\"_blank\">Escenario<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-3 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Requisitos\"  rel=\"nofollow\" target=\"_blank\">Requisitos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-4 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Instalacion_del_programa\"  rel=\"nofollow\" target=\"_blank\">Instalaci\u00f3n del programa<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Agregar_repositorio\"  rel=\"nofollow\" target=\"_blank\">Agregar repositorio<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#i\"  rel=\"nofollow\" target=\"_blank\">&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Claves_publicas_opcional\"  rel=\"nofollow\" target=\"_blank\">Claves p\u00fablicas (opcional)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#i-2\"  rel=\"nofollow\" target=\"_blank\">&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Actualizar_el_listado_de_paquetes\"  rel=\"nofollow\" target=\"_blank\">Actualizar el listado de paquetes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#i-3\"  rel=\"nofollow\" target=\"_blank\">&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Instalar_Certbot\"  rel=\"nofollow\" target=\"_blank\">Instalar Certbot<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-12 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Instalacion_del_certificado\"  rel=\"nofollow\" target=\"_blank\">Instalaci\u00f3n del certificado<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Instalacion_integrada\"  rel=\"nofollow\" target=\"_blank\">Instalaci\u00f3n integrada<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#i-4\"  rel=\"nofollow\" target=\"_blank\">&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Instalacion_manual\"  rel=\"nofollow\" target=\"_blank\">Instalaci\u00f3n manual<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-16 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Actualizacion_de_los_certificados\"  rel=\"nofollow\" target=\"_blank\">Actualizaci\u00f3n de los certificados<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Dominio_concreto_%E2%80%93_manual\"  rel=\"nofollow\" target=\"_blank\">Dominio concreto &#8211; manual<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Renovar_y_mantener_archivos_existentes\"  rel=\"nofollow\" target=\"_blank\">Renovar y mantener archivos existentes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Renovar_y_sobrescribir_archivos_existentes\"  rel=\"nofollow\" target=\"_blank\">Renovar y sobrescribir archivos existentes<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-20 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#i-5\"  rel=\"nofollow\" target=\"_blank\">&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Todos_los_dominios_%E2%80%93_manual_y_programado\"  rel=\"nofollow\" target=\"_blank\">Todos los dominios &#8211; manual y programado<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Manual\"  rel=\"nofollow\" target=\"_blank\">Manual<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Programado\"  rel=\"nofollow\" target=\"_blank\">Programado<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-24 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Actualizacion_sin_aplicar_cambios_%E2%80%93_test\"  rel=\"nofollow\" target=\"_blank\">Actualizaci\u00f3n sin aplicar cambios &#8211; test<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-25 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Revocar_un_certificado\"  rel=\"nofollow\" target=\"_blank\">Revocar un certificado<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-26 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Eliminar_un_certificado\"  rel=\"nofollow\" target=\"_blank\">Eliminar un certificado<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-27 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Tareas_de_limpieza\"  rel=\"nofollow\" target=\"_blank\">Tareas de limpieza<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-28 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#i-6\"  rel=\"nofollow\" target=\"_blank\">&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-29 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Borrado_manual\"  rel=\"nofollow\" target=\"_blank\">Borrado manual<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-30 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#i-7\"  rel=\"nofollow\" target=\"_blank\">&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-31 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Borrado_programado\"  rel=\"nofollow\" target=\"_blank\">Borrado programado<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-32 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Comprobar_validez_del_certificado\"  rel=\"nofollow\" target=\"_blank\">Comprobar validez del certificado<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-33 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Consideraciones_finales\"  rel=\"nofollow\" target=\"_blank\">Consideraciones finales<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-34 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\/#Enlaces_de_interes\"  rel=\"nofollow\" target=\"_blank\">Enlaces de inter\u00e9s<\/a><\/li><\/ul><\/nav><\/div>\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%C2%BFQue_es_Lets_Encrypt\"><\/span>\u00bfQu\u00e9 es Let&#8217;s Encrypt?<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p><em><strong>Let&#8217;s Encrypt<\/strong><\/em>, seg\u00fan su web oficial,&nbsp;es una autoridad certificadora gratuita, automatizada y abierta, destinada para el beneficio p\u00fablico, ofrecido por el <a href=\"https:\/\/abetterinternet.org\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\"><em><strong>Internet Security Research Group (ISRG)<\/strong><\/em><\/a>, creada en mayo del 2013 como hogar de proyectos de infraestructura digital para el beneficio p\u00fablico, cuyo fin es reducir las barreras econ\u00f3micas, tecnol\u00f3gicas y educacionales para securizar las comunicaciones a trav\u00e9s de Internet.<\/p>\n\n\n\n<p>Entre sus sponsors est\u00e1n Mozilla, the Electronic Frontier Foundation, the University of Michigan, Cisco y Akamai. Casi \u00abna\u00bb !!!<\/p>\n\n\n\n<p>Les dan a las personas certificados digitales que necesitan para habilitar&nbsp;<strong>HTTPS<\/strong>&nbsp;completamente gratuitos, de la manera m\u00e1s sencilla para el usuario que les es posible. Hacen esto con el \u00fanico fin de <span style=\"text-decoration: underline;\"><strong>crear una web m\u00e1s segura y respetuosa con la privacidad<\/strong><\/span>.<\/p>\n\n\n\n<p>Sus claves:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Gratuito.<\/li><li>Autom\u00e1tico.<\/li><li>Seguro.<\/li><li>Transparente.<\/li><li>Abierto.<\/li><li>Cooperativo.<\/li><\/ul>\n\n\n\n<p>Sus certificados tienen una vigencia de <span style=\"text-decoration: underline;\"><em><strong>3 meses<\/strong><\/em><\/span>, por este motivo tendremos que renovarlo varias veces al a\u00f1o, aunque para ello disponemos de un sencillo comando que configuraremos en el <em><strong>crontab<\/strong> <\/em>del sistema, como veremos m\u00e1s adelante.<\/p>\n\n\n\n<p>Si quieres conocer m\u00e1s sobre esta autoridad certificadora puedes acceder a su web oficial pinchando <a href=\"https:\/\/letsencrypt.org\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Escenario\"><\/span>Escenario<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p><span class=\"has-inline-color has-vivid-red-color\"><strong>IMPORTANTE<\/strong><\/span>, para versiones anteriores a Debian 9 ya no es compatible.<\/p>\n\n\n\n<p>Vamos a instalar el software necesario para gestionar estos certificados en una <strong>Raspberri Pi<\/strong> modelo <strong>2B<\/strong>\u00a0con el sistema operativo <strong>Raspbian<\/strong>, aunque es extensible a los modelos 3.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">Distributor ID:\tRaspbian\nDescription:\tRaspbian GNU\/Linux 8.0 (jessie)\nRelease:\t8.0\nCodename:\tjessie\n<\/pre>\n\n\n\n<p>Para ello haremos uso del <em><strong>certbot<\/strong><\/em>&nbsp;que es el programa que se comunica con la plataforma de <strong><em>Let&#8217;s Encrypt<\/em>&nbsp;<\/strong>para gestionar los certificados, para su creaci\u00f3n\/instalaci\u00f3n\/renovaci\u00f3n\/revocaci\u00f3n.<\/p>\n\n\n\n<p>El servidor web que vamos a utilizar en esta entrada es <strong>Nginx<\/strong>, aunque se puede utilizar cualquier otro. Sin embargo <strong>Nginx<\/strong> y <strong>Apache<\/strong> son compatibles con Certbot para automatizar las configuraciones necesarias en la redirecci\u00f3n de los protocolos <em><strong>HPPT -&gt; HTTPS<\/strong><\/em>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">nginx version: nginx\/1.6.2\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Requisitos\"><\/span>Requisitos<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>Debemos de disponer de los siguientes elementos para poder gestionar estos certificados:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Servidor web,<strong><em> stand alone<\/em><\/strong> o compartido (<em><strong>webroot<\/strong><\/em>).<\/li><li>Dominio p\u00fablico, que debe de apuntar a la IP del servidor.<\/li><li>IP fija o un servicio DNS para direccionamiento din\u00e1mico, como DynDNS (pincha <a href=\"https:\/\/dyn.com\/dns\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>).<\/li><li>Conexi\u00f3n al puerto 80 del servidor web desde el exterior.<\/li><li>Conexi\u00f3n al puerto 443 para levantar el servicio una vez instalado el certificado.<\/li><li><strong>NO<\/strong> tener un certificado instalado previamente para el dominio que vamos a utilizar.<\/li><\/ul>\n\n\n\n<p>El servidor web puede ser <em><strong>stand alone<\/strong><\/em>&nbsp;con un \u00fanico dominio, o compartido con distintos <em><strong>Virtual Hosts<\/strong><\/em> configurados.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Instalacion_del_programa\"><\/span>Instalaci\u00f3n del programa<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>Vamos a proceder con los pasos necesarios para su instalaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Agregar_repositorio\"><\/span>Agregar repositorio<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><strong><span class=\"has-inline-color has-vivid-red-color\">IMPORTANTE<\/span><\/strong>, para versiones anteriores a Debian 9 ya no es compatible.<\/p>\n\n\n\n<p>Si usas la \u00faltima versi\u00f3n de <strong>Raspbian<\/strong> con <em><strong>Stretch<\/strong><\/em> puedes saltar al apartado de instalaci\u00f3n pinchando <a href=\"https:\/\/blog.tiraquelibras.com\/?p=535&amp;preview_id=535&amp;preview_nonce=fd644a4d54&amp;post_format=standard&amp;_thumbnail_id=534&amp;preview=true#Instalar_Certbot\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">aqu\u00ed<\/a>, ya que el paquete que vamos a instalar se encuentra entre los repositorios de esta versi\u00f3n.<\/p>\n\n\n\n<p><s>Si usas la versi\u00f3n <em><strong>Jessie<\/strong><\/em>, como es nuestro caso, debemos de agregar el repositorio necesario antes de instalar el paquete. <span style=\"color: #ff0000;\"><strong>Cuidado!!!<\/strong><\/span>, este repositorio al no estar incluido en nuestra versi\u00f3n actual puede contener software que no ha sido testado.<\/s><\/p>\n\n\n\n<p><s>Editamos el archivo <em><strong>sources.list<\/strong><\/em>:<\/s><\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\"><s>sudo vim \/etc\/apt\/sources.list<\/s><\/pre>\n\n\n\n<p><s>Agregamos la siguiente l\u00ednea y guardamos:<\/s><\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\"><s>deb http:\/\/ftp.debian.org\/debian jessie-backports main\n<\/s><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"i\"><\/span>&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Claves_publicas_opcional\"><\/span>Claves p\u00fablicas (opcional)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><s>Podemos agregar las claves p\u00fablicas del repositorio agregado, aunque yo en un principio no lo hice y no pas\u00f3 nada. Sin embargo, si queremos estar seguros de lo que vamos a instalar desde este repositorio es recomendable descargarse las claves con los siguientes comandos:<\/s><\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\"><s>gpg --keyserver pgpkeys.mit.edu --recv-key  8B48AD6246925553\ngpg -a --export 8B48AD6246925553 | sudo apt-key add -\ngpg --keyserver pgpkeys.mit.edu --recv-key  7638D0442B90D010\ngpg -a --export 7638D0442B90D010 | sudo apt-key add -<\/s><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"i-2\"><\/span>&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Actualizar_el_listado_de_paquetes\"><\/span>Actualizar el listado de paquetes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Una vez cargado el respositorio actualizamos el listado de los paquetes disponibles.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">sudo apt-get update<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"i-3\"><\/span>&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Instalar_Certbot\"><\/span>Instalar Certbot<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Instalamos el software <strong>Certbot<\/strong> de <em><strong>Let&#8217;s Encrypt<\/strong><\/em>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">sudo apt-get install certbot<\/pre>\n\n\n\n<p>Confirmamos la versi\u00f3n instalada:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ certbot --version\ncertbot 0.10.2\n<\/pre>\n\n\n\n<p>Comprobamos que no existen certificados disponibles en estos momentos:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ sudo certbot certificates\nSaving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\n\n-------------------------------------------------------------------------------\nNo certs found.\n-------------------------------------------------------------------------------\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Instalacion_del_certificado\"><\/span>Instalaci\u00f3n del certificado<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>Disponemos de dos m\u00e9todos de instalaci\u00f3n, la integrada (framework para Apache o Nginx) y la manual.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Instalacion_integrada\"><\/span>Instalaci\u00f3n integrada<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Ahora podemos configurar el entorno para ser usado con <strong>Nginx<\/strong>, tambi\u00e9n disponible para <strong>Apache<\/strong>, o podemos usarlo tal cual se ha instalado. Esto es debido a que si lo configuramos para cualquiera de estos servidores web el mismo programa nos ofrece la opci\u00f3n de configurar las redirecciones <em><strong>HTTP-&gt;HTTPS<\/strong><\/em>&nbsp;de manera autom\u00e1tica sin que tengamos que hacer nosotros nada.&nbsp;<span style=\"text-decoration: underline; color: #ff0000;\">En esta entrada vamos a realizar una instalaci\u00f3n <strong>manual<\/strong>.<\/span><\/p>\n\n\n\n<p>De todas formas, si quieres investigar y probar este plugin aqu\u00ed te dejo los pasos para su instalaci\u00f3n.<\/p>\n\n\n\n<p>Existen varios paquetes para integrar Certbot con Nginx y Apache:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ sudo apt-cache search certbot\ncertbot - automatically configure HTTPS using Let's Encrypt\nletsencrypt - transitional dummy package\npython-certbot - main library for certbot\npython-certbot-doc - client documentation for certbot\npython-certbot-apache - Apache plugin for Certbot\npython-certbot-apache-doc - Apache plugin documentation for Certbot\npython-certbot-nginx - Nginx plugin for Certbot\npython-certbot-nginx-doc - Nginx plugin documentation for Certbot\n<\/pre>\n\n\n\n<p>En nuestro caso instalamos el plugin para nuestro servidor web:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">sudo apt-get install python-certbot-nginx\n<\/pre>\n\n\n\n<p>Se instalan los paquetes&nbsp; <em><strong>python-certbot-nginx, python-pyparsing.<\/strong><\/em><\/p>\n\n\n\n<p>Y ahora configuramos el paquete para nuestro servidor web sin indicar los dominios en el comando, lo que nos obliga a contestar ciertas preguntas sobre los dominios instalados e identificados en el servidor:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ sudo certbot --nginx\nSaving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\n\nWhich names would you like to activate HTTPS for?\n-------------------------------------------------------------------------------\n1: tiraquelibras.com\n2: www.tiraquelibras.com\n3: yeloquehay.com\n4: correu.yeloquehay.com\n5: www.yeloquehay.com\n-------------------------------------------------------------------------------\nSelect the appropriate numbers separated by commas and\/or spaces, or leave input\nblank to select all options shown (Enter 'c' to cancel):\n...<\/pre>\n\n\n\n<p>O indicamos los dominios en el mismo comando:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ sudo certbot --nginx -d yeloquehay.com -d www.yeloquehay.com\nSaving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\nStarting new HTTPS connection (1): acme-v01.api.letsencrypt.org\nObtaining a new certificate\nPerforming the following challenges:\n...<\/pre>\n\n\n\n<p>Llegar\u00e1 un punto en el que nos pregunta si queremos que Certbot configure las redirecciones al puerto seguro a nivel de servidor web, a\u00f1adiendo las l\u00edneas de c\u00f3digo necesarias autom\u00e1ticamente.<\/p>\n\n\n\n<p>Llegado a este punto tendr\u00edamos el certificado instalado y configurado&nbsp; para el o los dominios solicitados, <strong><span style=\"text-decoration: underline;\">no siendo necesario seguir con el resto de pasos de esta entrada.<\/span><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"i-4\"><\/span>&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Instalacion_manual\"><\/span>Instalaci\u00f3n manual<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Para la instalaci\u00f3n manual podemos indicar que el servidor web es <em><strong>stand alone<\/strong><\/em>, o lo que es lo mismo con un \u00fanico dominio configurado, o <em><strong>compartido<\/strong><\/em>, con varios <strong><em>Virtual Servers<\/em><\/strong> configurados, que es nuestro caso. Vamos a iniciar la instalaci\u00f3n para el dominio <span style=\"color: #ff0000;\"><strong>yeloquehay.com<\/strong> <\/span>y su subdominio con <span style=\"color: #ff0000;\"><strong>www<\/strong><\/span>.<\/p>\n\n\n\n<p><strong>Stand alone<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">sudo certbot --standalone -d yeloquehay.com -d www.yeloquehay.com<\/pre>\n\n\n\n<p><strong>Webroot (compartido)<\/strong>, este es nuestro escenario. Tenemos que indicar el <em><strong>Document Root<\/strong> <\/em>en donde se encuentra alojada la web del dominio que vamos a indicar:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">sudo certbot certonly --webroot -w \/media\/raid\/data\/yeloquehay.com\/www\/ -d yeloquehay.com -d www.yeloquehay.com<\/pre>\n\n\n\n<p>Estos son los pasos que va ejecutando el programa:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">Saving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\nStarting new HTTPS connection (1): acme-v01.api.letsencrypt.org\nObtaining a new certificate\nPerforming the following challenges:\nhttp-01 challenge for yeloquehay.com\nhttp-01 challenge for www.yeloquehay.com\nUsing the webroot path \/media\/raid\/data\/yeloquehay.com\/www for all unmatched domains.\nWaiting for verification...\nCleaning up challenges\nGenerating key (2048 bits): \/etc\/letsencrypt\/keys\/0003_key-certbot.pem\nCreating CSR: \/etc\/letsencrypt\/csr\/0003_csr-certbot.pem\n\nIMPORTANT NOTES:\n\n - Congratulations! Your certificate and chain have been saved at  \/etc\/letsencrypt\/live\/yeloquehay.com\/fullchain.pem. Your cert will expire on 2019-05-18. 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\".\n - If you like Certbot, please consider supporting our work by:\n\n   Donating to ISRG \/ Let's Encrypt:   https:\/\/letsencrypt.org\/donate\n   Donating to EFF:                    https:\/\/eff.org\/donate-le\n<\/pre>\n\n\n\n<p>Ahora podremos crear la redirecci\u00f3n <strong>HTTP -> HTTPS<\/strong>\u00a0indicando los archivos del certificado, teniendo en cuenta su fecha de expiraci\u00f3n:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Archivo Cert -> \/etc\/letsencrypt\/live\/yeloquehay.com\/fullchain.pem<\/li><li>Archivo Key -> \/etc\/letsencrypt\/live\/yeloquehay.com\/privkey.pem<\/li><li>Fecha de expiraci\u00f3n del archivo Cert -> Your cert will expire on 2019-05-18<\/li><\/ul>\n\n\n\n<p>Contenido del archivo VirtualHost con la redirecci\u00f3n, <em><strong>yeloquehay.conf<\/strong><\/em>, ojo con la configuraci\u00f3n <strong>PHP<\/strong> que tengas en tu servidor ya que yo tengo dos versiones distintas instaladas, pero para este <em><strong>VirtualHost<\/strong><\/em> uso <strong>PHP5<\/strong>. <span style=\"text-decoration: underline; color: #ff0000;\">Configura este apartado seg\u00fan las preferencias de tu sevidor<\/span>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">server {\n        listen 80;\n        server_name www.yeloquehay.com yeloquehay.com;\n        return 301 https:\/\/$server_name$request_uri; #forzar a https;\n}\n\nserver {\n        listen 443 ssl;\n        server_name&nbsp;www.yeloquehay.com&nbsp;yeloquehay.com;&nbsp;\n        root \/media\/raid\/data\/yeloquehay.com\/www;\n        index index.html index.htm index.php;\n\n        error_page 404 \/404.html;\n        error_page 500 502 503 504 \/50x.html;\n        location = \/50x.html {\n           root \/media\/raid\/data\/yeloquehay.com\/www;\n        }\n\n        error_log \/media\/raid\/data\/yeloquehay.com\/logs\/error.log error;\n        access_log \/media\/raid\/data\/yeloquehay.com\/logs\/access.log;\n\n        client_max_body_size 10G; # set max upload size\n        fastcgi_buffers 64 4k;\n\n        # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)\n        add_header Strict-Transport-Security max-age=15768000;\n\n        ssl on;\n        ssl_certificate \/etc\/letsencrypt\/live\/yeloquehay.com\/fullchain.pem;\n        ssl_certificate_key \/etc\/letsencrypt\/live\/yeloquehay.com\/privkey.pem;\n        ssl_session_timeout 5m;\n        ssl_protocols TLSv1.1 TLSv1.2; # omit SSLv3 because of POODLE (CVE-2014-3566)\n        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:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-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';\n        ssl_session_cache   shared:SSL:5m;\n        ssl_prefer_server_ciphers on;\n\n    location \/ {\n        index index.html index.php;\n        allow all;\n    }\n\n\n    # MODIFICA SEGUN TU VERSION DE PHP\n\n    location ~ \\.php(?:$|\/) {\n        fastcgi_split_path_info ^(.+\\.php)(\/.+)$;\n        include fastcgi_params;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        fastcgi_param PATH_INFO $fastcgi_path_info;\n        # fastcgi_param HTTPS on;\n        fastcgi_pass unix:\/var\/run\/php5-fpm.sock;\n        #fastcgi_pass php-handler;\n        fastcgi_index index.php; # si fallara quitar esta linea\n        fastcgi_read_timeout 600;\n    }\n\n\n\n}<\/pre>\n\n\n\n<p>Recordar reiniciar el servicio del servidor web:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">sudo service nginx restart<\/pre>\n\n\n\n<p>Revisar cualquier error que os pueda dar el reinicio, ya que alguno de los pasos previos no est\u00e1 bien ejecutado.<\/p>\n\n\n\n<p>Ahora el certificado que se muestra al acceder a la URL es el de <em><strong>Let&#8217;s Encrypt<\/strong><\/em>:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2019\/02\/LE-1.jpg\" class=\"external\" rel=\"nofollow\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" width=\"225\" height=\"35\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2019\/02\/LE-1.jpg\" alt=\"\" class=\"wp-image-545\"\/><\/a><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2019\/02\/LE-2.jpg\" class=\"external\" rel=\"nofollow\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" width=\"414\" height=\"515\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2019\/02\/LE-2.jpg\" alt=\"\" class=\"wp-image-544\"\/><\/a><\/figure><\/div>\n\n\n\n<p>Comprobamos el estado de los certificados instalados:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ sudo certbot certificates\nSaving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\n\n-------------------------------------------------------------------------------\nFound the following certs:\n  Certificate Name: yeloquehay.com\n    Domains: yeloquehay.com www.yeloquehay.com\n    Expiry Date: 2019-05-18 12:08:42+00:00 (VALID: 88 days)\n    Certificate Path: \/etc\/letsencrypt\/live\/yeloquehay.com\/fullchain.pem\n    Private Key Path: \/etc\/letsencrypt\/live\/yeloquehay.com\/privkey.pem\n-------------------------------------------------------------------------------\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Actualizacion_de_los_certificados\"><\/span>Actualizaci\u00f3n de los certificados<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>Podemos actualizar un certificado concreto o todos los instalados con <em><strong>Let&#8217;s Encrypt<\/strong><\/em>. Para ello usamos comandos distintos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Dominio_concreto_%E2%80%93_manual\"><\/span>Dominio concreto &#8211; manual<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Para actualizar el certificado de un dominio en concreto debemos indicar los siguientes datos:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>El dominio dentro del listado de certificados instalados disponibles.<\/li><li>Si el servidor web es <em><strong>standalone<\/strong> <\/em>o <em><strong>webroot<\/strong><\/em>.<\/li><li>Si mantenemos los archivos existentes o renovamos y sobrescribimos estos.<\/li><li>Como nuestro caso es compartido debemos de indicar el nuevo <em><strong>webroot<\/strong><\/em>, o path en donde se encuentra la aplicaci\u00f3n web instalada.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Renovar_y_mantener_archivos_existentes\"><\/span>Renovar y mantener archivos existentes<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Estos son los pasos para el caso de mantener los archivos existentes:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ sudo certbot certonly -d yeloquehay.com\nSaving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\n\nHow would you like to authenticate with the ACME CA?\n-------------------------------------------------------------------------------\n1: Place files in webroot directory (webroot)\n2: Spin up a temporary webserver (standalone)\n-------------------------------------------------------------------------------\nSelect the appropriate number [1-2] then [enter] (press 'c' to cancel): 1\nStarting new HTTPS connection (1): acme-v01.api.letsencrypt.org\nObtaining a new certificate\nPerforming the following challenges:\nhttp-01 challenge for yeloquehay.com\n\nSelect the webroot for yeloquehay.com:\n-------------------------------------------------------------------------------\n1: Enter a new webroot\n-------------------------------------------------------------------------------\nPress 1 [enter] to confirm the selection (press 'c' to cancel): 1\nInput the webroot for yeloquehay.com: (Enter 'c' to cancel):\/media\/raid\/data\/yeloquehay.com\/www\nWaiting for verification...\nCleaning up challenges\nGenerating key (2048 bits): \/etc\/letsencrypt\/keys\/0005_key-certbot.pem\nCreating CSR: \/etc\/letsencrypt\/csr\/0005_csr-certbot.pem\n\nIMPORTANT NOTES:\n - Congratulations! Your certificate and chain have been saved at\n   \/etc\/letsencrypt\/live\/yeloquehay.com-0001\/fullchain.pem. Your cert\n   will expire on 2019-05-19. To obtain a new or tweaked version of\n   this certificate in the future, simply run certbot again. To\n   non-interactively renew *all* of your certificates, run \"certbot\n   renew\"\n - If you like Certbot, please consider supporting our work by:\n\n   Donating to ISRG \/ Let's Encrypt:   https:\/\/letsencrypt.org\/donate\n   Donating to EFF:                    https:\/\/eff.org\/donate-le\n<\/pre>\n\n\n\n<p>Se genera un nuevo directorio para los certificados del dominio, manteniendo los existentes:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ sudo ls -altr \/etc\/letsencrypt\/live\/\ntotal 16\ndrwxr-xr-x 8 root root 4096 feb 17 13:24 ..\ndrwxr-xr-x 2 root root 4096 feb 18 14:04 yeloquehay.com\ndrwx------ 4 root root 4096 feb 18 15:43 .\ndrwxr-xr-x 2 root root 4096 feb 18 15:52 yeloquehay.com-0001\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Renovar_y_sobrescribir_archivos_existentes\"><\/span>Renovar y sobrescribir archivos existentes<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Estos son los pasos si escogemos renovar y sobrescribir los archivos existentes:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ sudo certbot certonly -d yeloquehay.com\nSaving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\n\nHow would you like to authenticate with the ACME CA?\n-------------------------------------------------------------------------------\n1: Place files in webroot directory (webroot)\n2: Spin up a temporary webserver (standalone)\n-------------------------------------------------------------------------------\nSelect the appropriate number [1-2] then [enter] (press 'c' to cancel): 1\nStarting new HTTPS connection (1): acme-v01.api.letsencrypt.org\nCert not yet due for renewal\n\nYou have an existing certificate that has exactly the same domains or certificate name you requested and isn't close to expiry.\n(ref: \/etc\/letsencrypt\/renewal\/yeloquehay.com-0001.conf)\n\nWhat would you like to do?\n-------------------------------------------------------------------------------\n1: Keep the existing certificate for now\n2: Renew &amp; replace the cert (limit ~5 per 7 days)\n-------------------------------------------------------------------------------\nSelect the appropriate number [1-2] then [enter] (press 'c' to cancel): 2\nRenewing an existing certificate\nPerforming the following challenges:\nhttp-01 challenge for yeloquehay.com\n\nSelect the webroot for yeloquehay.com:\n-------------------------------------------------------------------------------\n1: Enter a new webroot\n-------------------------------------------------------------------------------\nPress 1 [enter] to confirm the selection (press 'c' to cancel): 1\nInput the webroot for yeloquehay.com: (Enter 'c' to cancel):\/media\/raid\/data\/yeloquehay.com\/www\nWaiting for verification...\nCleaning up challenges\nGenerating key (2048 bits): \/etc\/letsencrypt\/keys\/0006_key-certbot.pem\nCreating CSR: \/etc\/letsencrypt\/csr\/0006_csr-certbot.pem\n\nIMPORTANT NOTES:\n - Congratulations! Your certificate and chain have been saved at\n   \/etc\/letsencrypt\/live\/yeloquehay.com-0001\/fullchain.pem. Your cert\n   will expire on 2019-05-19. To obtain a new or tweaked version of\n   this certificate in the future, simply run certbot again. To\n   non-interactively renew *all* of your certificates, run \"certbot\n   renew\"\n - If you like Certbot, please consider supporting our work by:\n\n   Donating to ISRG \/ Let's Encrypt:   https:\/\/letsencrypt.org\/donate\n   Donating to EFF:                    https:\/\/eff.org\/donate-le\n<\/pre>\n\n\n\n<p>No se genera un directorio nuevo, sino que se actualizan en el directorio actual:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ sudo ls -altr \/etc\/letsencrypt\/live\ntotal 16\ndrwxr-xr-x 8 root root 4096 feb 17 13:24 ..\ndrwxr-xr-x 2 root root 4096 feb 18 14:04 yeloquehay.com\ndrwx------ 4 root root 4096 feb 18 15:43 .\ndrwxr-xr-x 2 root root 4096 feb 18 15:55 yeloquehay.com-0001\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"i-5\"><\/span>&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Todos_los_dominios_%E2%80%93_manual_y_programado\"><\/span>Todos los dominios &#8211; manual y programado<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Otra forma de actualizar los certificados es dejando que el mismo programa decida que tiene que actualizar y que no, dependiendo de su fecha de caducidad.<\/p>\n\n\n\n<p>Si se encuentra entre los 7 ~ 5 d\u00edas previos a su fecha de caducidad este pasar\u00e1 a estado <em>disponible de renovar<\/em>. De lo contrario no har\u00e1 nada.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Manual\"><\/span>Manual<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>El comando que usaremos para renovar todos los certificados es el siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\"> $ sudo certbot renew\nSaving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\n\n-------------------------------------------------------------------------------\nProcessing \/etc\/letsencrypt\/renewal\/yeloquehay.com-0001.conf\n-------------------------------------------------------------------------------\nCert not yet due for renewal\n\n-------------------------------------------------------------------------------\nProcessing \/etc\/letsencrypt\/renewal\/yeloquehay.com.conf\n-------------------------------------------------------------------------------\nCert not yet due for renewal\n\nThe following certs are not due for renewal yet:\n  \/etc\/letsencrypt\/live\/yeloquehay.com-0001\/fullchain.pem (skipped)\n  \/etc\/letsencrypt\/live\/yeloquehay.com\/fullchain.pem (skipped)\nNo renewals were attempted.\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Programado\"><\/span>Programado<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Podemos automatizar la renovaci\u00f3n de los certificados instalados con Let&#8217;s Encrypt en el servidor programando una tarea del <em><strong>crontab<\/strong> <\/em>en el propio sistema.<\/p>\n\n\n\n<p>Como la renovaci\u00f3n de un certificado requiere el reinicio del servidor web haremos uso de las funciones <em><strong>pre-hook<\/strong> <\/em>y <em><strong>post-hook<\/strong><\/em>&nbsp;para ejecutar comandos del sistema antes y despu\u00e9s de la tarea ejecutada, o <em><strong>renew-hook<\/strong> <\/em>para ejeuctar el comando tras la tarea de renovaci\u00f3n en concreto.<\/p>\n\n\n\n<p>Ejecuci\u00f3n diaria a las 2:30 am, desde el usuario <strong>root<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ crontab -e\n30 2 * * * \/usr\/bin\/certbot renew --renew-hook \"service nginx reload\"<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Actualizacion_sin_aplicar_cambios_%E2%80%93_test\"><\/span>Actualizaci\u00f3n sin aplicar cambios &#8211; test<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Tambi\u00e9n podemos comprobar el resultado de ejecutar una renovaci\u00f3n de todos los certificados sin generar ni aplicar archivo alguno. De esta manera podemos identificar problemas a la hora de ejecutar la renovaci\u00f3n de manera controlada.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\"> $ sudo certbot renew --renew-hook \"sudo service nginx reload\" --dry-run\nSaving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\n\n-------------------------------------------------------------------------------\nProcessing \/etc\/letsencrypt\/renewal\/yeloquehay.com-0001.conf\n-------------------------------------------------------------------------------\nCert not due for renewal, but simulating renewal for dry run\nStarting new HTTPS connection (1): acme-staging.api.letsencrypt.org\nRenewing an existing certificate\nPerforming the following challenges:\nhttp-01 challenge for yeloquehay.com\nhttp-01 challenge for www.yeloquehay.com\nWaiting for verification...\nCleaning up challenges\nGenerating key (2048 bits): \/etc\/letsencrypt\/keys\/0016_key-certbot.pem\nCreating CSR: \/etc\/letsencrypt\/csr\/0016_csr-certbot.pem\nDry run: skipping renewal hook command: sudo service nginx reload\n** DRY RUN: simulating 'certbot renew' close to cert expiry\n**          (The test certificates below have not been saved.)\n\nCongratulations, all renewals succeeded. The following certs have been renewed:\n  \/etc\/letsencrypt\/live\/yeloquehay.com-0001\/fullchain.pem (success)\n** DRY RUN: simulating 'certbot renew' close to cert expiry\n**          (The test certificates above have not been saved.)\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Revocar_un_certificado\"><\/span>Revocar un certificado<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>Al revocar un certificado <em><strong>Let&#8217;s Encrypt<\/strong><\/em>&nbsp;lo publicar\u00e1 a trav\u00e9s del <strong>OCSP<\/strong> (<em><strong>Online Certificate Status Protocol<\/strong><\/em>), el cual es consultado por algunos navegadores para identificar si el certificado es de confianza o no. Esto puede darse cuando por error compartimos las claves privadas de manera&nbsp; p\u00fablica, por ejemplo. Documentaci\u00f3n oficial pincha <a href=\"https:\/\/letsencrypt.org\/docs\/revoking\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ sudo certbot revoke --cert-path \/etc\/letsencrypt\/live\/yeloquehay.com\/fullchain.pemSaving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\nStarting new HTTPS connection (1): acme-v01.api.letsencrypt.org\n\n-------------------------------------------------------------------------------\nCongratulations! You have successfully revoked the certificate that was located\nat \/etc\/letsencrypt\/live\/yeloquehay.com\/fullchain.pem\n\n-------------------------------------------------------------------------------<\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Eliminar_un_certificado\"><\/span>Eliminar un certificado<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>Para eliminar un certificado de los cargados en nuestro servidor con Certbot ejecutamos el siguiente comando, indicando del listado cual queremos borrar.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ sudo certbot delete\nSaving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\n\nWhich certificate would you like to delete?\n-------------------------------------------------------------------------------\n1: yeloquehay.com\n2: yeloquehay.com-0001\n-------------------------------------------------------------------------------\nPress 1 [enter] to confirm the selection (press 'c' to cancel): 1\n\n-------------------------------------------------------------------------------\nDeleted all files relating to certificate yeloquehay.com.\n-------------------------------------------------------------------------------\n<\/pre>\n\n\n\n<p>Este quedar\u00eda eliminado:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ sudo certbot certificates\nSaving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\n\n-------------------------------------------------------------------------------\nFound the following certs:\n  Certificate Name: yeloquehay.com-0001\n    Domains: yeloquehay.com www.yeloquehay.com\n    Expiry Date: 2019-05-19 14:52:09+00:00 (VALID: 89 days)\n    Certificate Path: \/etc\/letsencrypt\/live\/yeloquehay.com-0001\/fullchain.pem\n    Private Key Path: \/etc\/letsencrypt\/live\/yeloquehay.com-0001\/privkey.pem\n-------------------------------------------------------------------------------\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Tareas_de_limpieza\"><\/span>Tareas de limpieza<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>Cuando generamos un certificado o renovamos uno existente se generan ciertos archivos necesarios para obtener el certificado final. Estos son los archivos <em><strong>.csr<\/strong> <\/em>y <em><strong>.key<\/strong><\/em>, los cuales se almacenan en los directorios&nbsp;<em><strong>\/etc\/letsencrypt\/csr\/<\/strong><\/em> y&nbsp;<em><strong>\/etc\/letsencrypt\/keys\/<\/strong><\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">$ ls \/etc\/letsencrypt\/csr\/\n0000_csr-certbot.pem  0004_csr-certbot.pem  0008_csr-certbot.pem  0012_csr-certbot.pem  0016_csr-certbot.pem\n0001_csr-certbot.pem  0005_csr-certbot.pem  0009_csr-certbot.pem  0013_csr-certbot.pem\n0002_csr-certbot.pem  0006_csr-certbot.pem  0010_csr-certbot.pem  0014_csr-certbot.pem\n0003_csr-certbot.pem  0007_csr-certbot.pem  0011_csr-certbot.pem  0015_csr-certbot.pem\n\n$ ls \/etc\/letsencrypt\/keys\/\n0000_key-certbot.pem  0004_key-certbot.pem  0008_key-certbot.pem  0012_key-certbot.pem  0016_key-certbot.pem\n0001_key-certbot.pem  0005_key-certbot.pem  0009_key-certbot.pem  0013_key-certbot.pem\n0002_key-certbot.pem  0006_key-certbot.pem  0010_key-certbot.pem  0014_key-certbot.pem\n0003_key-certbot.pem  0007_key-certbot.pem  0011_key-certbot.pem  0015_key-certbot.pem\n<\/pre>\n\n\n\n<p>Es buena pr\u00e1ctica borrarlos cada cierto tiempo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"i-6\"><\/span>&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Borrado_manual\"><\/span>Borrado manual<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Los podemos borrar a mano.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">rm -rf \/etc\/letsencrypt\/csr\/*\nrm -rf \/etc\/letsencrypt\/keys\/*\n\nservice nginx reload<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"i-7\"><\/span>&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Borrado_programado\"><\/span>Borrado programado<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>O desde el <em><strong>crontab&nbsp;<\/strong><\/em>del usuario&nbsp;<em><strong>root<\/strong><\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted EnlighterJSRAW\">30 3 * * * \/bin\/rm -rf \/etc\/letsencrypt\/csr\/* &amp;&amp; \/bin\/rm -rf \/etc\/letsencrypt\/keys\/*\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Comprobar_validez_del_certificado\"><\/span>Comprobar validez del certificado<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>Una vez instalado el certificado podemos comprobar su validez con alguna herramienta online, como el test de <em><strong>Qualys<\/strong><\/em> desde la URL&nbsp;<a href=\"https:\/\/www.ssllabs.com\/ssltest\/analyze.html\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\">https:\/\/www.ssllabs.com\/ssltest\/analyze.html<\/a><\/p>\n\n\n\n<p>Esto lleva un tiempo hasta finalizar todos los chequeos.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/www.ssllabs.com\/ssltest\/analyze.html?d=yeloquehay.com\" class=\"external\" rel=\"nofollow\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"677\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2019\/02\/Captura-de-pantalla-de-2019-02-18-18-51-01-1024x677.png\" alt=\"\" class=\"wp-image-550\"\/><\/a><\/figure><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Consideraciones_finales\"><\/span>Consideraciones finales<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>Es importante mantener los certificados SSL\/TLS configurados y permanentemente actualizados, colaborando a crear y mantener un Internet cada vez m\u00e1s seguro, pero que no nos suponga un esfuerzo econ\u00f3mico grande. Para ello contamos con esta fabulosa plataforma sin \u00e1nimo de lucro, la cual est\u00e1 siendo muy bien acogida tanto por corporaciones como usuarios.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Enlaces_de_interes\"><\/span>Enlaces de inter\u00e9s<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>Enlaces consultados, pincha <a href=\"https:\/\/pimylifeup.com\/raspberry-pi-ssl-lets-encrypt\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>,&nbsp;<a href=\"https:\/\/www.onepagezen.com\/letsencrypt-auto-renew-certbot-apache\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>&nbsp;y <a href=\"https:\/\/serverfault.com\/questions\/790772\/cron-job-for-lets-encrypt-renewal\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>.<\/p>\n\n\n\n<p>Let&#8217;s Encrypt oficial, pincha <a href=\"https:\/\/letsencrypt.org\/es\/about\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>.<\/p>\n\n\n\n<p>Let&#8217;s Encrypt Wikipedia, pincha <a href=\"https:\/\/es.wikipedia.org\/wiki\/Let's_encrypt\" target=\"_blank\" rel=\"noopener noreferrer\">aqu\u00ed<\/a>.<\/p>\n\n\n\n<p>Internet Security Research Group oficial, pincha <a href=\"https:\/\/www.abetterinternet.org\/about\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>.<\/p>\n\n\n\n<p>Namecheap certificados oficial, pincha <a href=\"https:\/\/www.namecheap.com\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>.<\/p>\n\n\n\n<p>Qualys test online, pincha <a href=\"https:\/\/www.ssllabs.com\/ssltest\/analyze.html\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>.<\/p>\n\n\n\n<p>Noticia Google y p\u00e1ginas HTTP, pincha <a href=\"https:\/\/blog.interdominios.com\/google-chrome-califica-ya-como-no-seguras-las-webs-sin-protocolo-https\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>.<\/p>\n\n\n\n<p>DynDNS oficial, pincha <a href=\"https:\/\/dyn.com\/dns\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ACTUALIZADO 21\/09\/2020. Parece ser que Certbot ya no est\u00e1 disponible para Debian 8 Jessie, ya no aparece en el desplegable de la web oficial para<span class=\"read-more-link\"><a class=\"read-more\" href=\"https:\/\/blog.tiraquelibras.com\/?p=535\">Read More<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":534,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,22],"tags":[23,43,47,45,46,42,44],"class_list":["post-535","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sistemas","category-ti","tag-certificados","tag-cifrado","tag-nginx","tag-raspberry","tag-raspbian","tag-tls","tag-web"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/posts\/535","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=535"}],"version-history":[{"count":0,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/posts\/535\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/media\/534"}],"wp:attachment":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=535"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=535"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=535"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}