Sitio HTTPS + Webfaction + Let's Encrypt

Published: Jul 12, 2018 by Noe Nieto

Nota: Webfaction dejo de existir hace muchos años y Let’s Encrypt ha sido automatizado en gran parte. Este articulo esta aquí por razones históricas.

Estas son mis notas de configuracion de HTTPS en webfaction usando certificados de Let’s Encrypt. Ya había publicado una guía anterior, pero hay una nueva version del letsencrypt_webfaction y trae cambios que requieren reconfigurar. Así que volvemos a empezar desde cero.

Preparación del sitio

La preparación del sitio es la misma y no es necesario cubrirla de nuevo.

Actualzación de letsencrypt_webfaction

La guía de instalación oficial está en github.

El comando para instalar y actualizar es el mismo:

GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib gem2.2 install letsencrypt_webfaction

En esta ocasión voy a seguir las instrucciones al pie de la letra y voy a configurar el comando /letsencrypt_webfaction mediante .bash_profile. Así quedó el mio:

cat .bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

function letsencrypt_webfaction {
    PATH=$PATH:$GEM_HOME/bin GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib ruby2.2 $HOME/.letsencrypt_webfaction/gems/bin/letsencrypt_webfaction $*
}

El script anterior ~/bin/letsencrypt_webfaction lo dejé de usar y lo borré.

Inicialización del archivo de configuración:

Una de las novedades de la versión 0.3 de letsencrypt_webfaction es que el script ya no acepta ningun parámetro en la línea de comando, excepto por init y run. Cuando corres el comando init se crea el archivo ~/letsencrypt_webfaction.toml

Reconfiguración

En la versión 0.2 de letsencrypt_webfaction tenía que tener un archivo de configuración por cada dominio/sitio. Ahora sólo se requiere un solo archivo (letsencrypt_webfaction.toml). La configuración anterior (~/letsencrypt/demos_noenieto_com.yml) era:

domains: [demos.noenieto.com]
public: [/home/nnieto/webapps/demos_http]
output_dir: /home/nnieto/letsencrypt/
letsencrypt_account_email: nnieto@noenieto.com
username: noenieto
password: S0rpr354
cert_name: demos_noenieto_com

Ahora la configuración va a ser:

username = "nmnieto"
password = "S0rpr354"
letsencrypt_account_email = "nnieto@noenieto.com"
endpoint = "https://acme-staging.api.letsencrypt.org/" # Staging

[[certificate]]
domains = [
  "demos.noenieto.com",
]
public = "~/webapps/demos_noenieto/"
name = "demos_noenieto_com"

Pruebas

Primero probamos con staging

 letsencrypt_webfaction run
-64 days until expiration of demos_noenieto_com. Renewing...
Your new certificate is now created and installed.
You will need to change your application to use the demos_noenieto_com certificate.
Add the `--quiet` parameter in your cron task to remove this message.

Después de correr el comando pude ver que el certificado ya se había actualizado en el panel de control de webfaction y además mi sitio ya estaba usando el nuevo certificado (aunque es inválido por que usé el servidor staging de letsencrypt.

Ahora sólo falta configurar el sitio web para que use el endpoint de producción (editando el archivo .toml)

Cronjob para renovación de certificados

Con esta nueva version todo va a estar concentrado en un solo archivo de configuración, así que todos los certificados se van a renovar al mismo tiempo. Otro cambio importante con esta nueva version es que esta pensada para que el cronjob de renovación de certificados se corra una vez al día.

Como en la ocasión anterior, los certificados de Let’s encrypt sólo duran sólo 90 días. El servidor de producción de letsencrypt te limita a 5 certificados por dominio cada 7 días. Pero parece que no va a haber problema si letsencrypt_webfaction corre diariamente por que detecta cuánto falta para renovar cierto certificado. Corrí el comando de nuevo como proueba y ahora el resultado fue distinto:

$ letsencrypt_webfaction run
90 days until expiration of demos_noenieto_com. Skipping...

Habiendo considerado todo esto, el crojob va a quedar así:

# Let's encrypt
18 3 * * *     PATH=$PATH:$GEM_HOME/bin:/usr/local/bin GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib ruby2.2 $HOME/.letsencrypt_webfaction/gems/bin/letsencrypt_webfaction run --quiet

Con esto se correrá letsencrypy_webfaction rodos los dias a las 3:18 am.

Notificacion por email

En este momento no voy programer notificacion mediante email, por que se estaría enviando diariamente y no tiene caso.

Problemas

letsencryp_webfaction solo admite dos comandos: init y run. Inicialmente generé mi certificado usando el servidor de staging. Cuando todo salió bien cambié la configuración para usar el servidor de producción. Pero parece que letsencrypt_webfaction no detecta que cambiaste de servidor y tampoco tiene ninguna opción para forzar la generación del certificado. No soy el único que tuvo este problema, al parecer.

Por el momento lo arrglé cambiando el nombre del certificado.

webfaction

Share

Latest Posts

Cómo Usar la Librería Tenacity en Python
Cómo Usar la Librería Tenacity en Python

Una pequeña guía para comenzar a usar la librería Tenacity de Python

Convierte texto seleccionado a enlaces en Google Docs
Convierte texto seleccionado a enlaces en Google Docs

Guía para crear un guión de AppsScript que transforme el texto seleccionado en un documento de Google Docs

Nube de palabras en Inkscape
Nube de palabras en Inkscape

Pequeña guía para hacer una nube de palabras (o tag cloud) en Inkscape