Lamentablemente, el cliente letsencrypt-auto que se utiliza para generar certificados TLS de Let's Encrypt no está pensado para acceder a Internet a través un proxy HTTP/HTTPS. Entonces, ¿qué pasa si necesitamos emitir un certificado para uno de nuestros servidores, dentro una red corporativa, detrás de un proxy HTTP? No queda otra alternativa que realizar algunos cambios en el script (estas son las grandes ventajas de utilizar soluciones abiertas, se pueden modificar/adaptar a las necesidades de cada uno).

Este artículo explica cómo modificar el script letsencrypt-auto para que funcione utilizando un proxy HTTP/HTTPS.

Si se intenta ejecutar el script letsencrypt-auto desde un sistema sin acceso directo a Internet, por más que estén correctamente configuradas las variables de entorno HTTP_PROXY y HTTPS_PROXY, finaliza con el error:

<urlopen error [Errno 101] Network is unreachable>

Suponiendo que la URL de acceso al proxy es http://proxy.linuxito.com:8080, se modificará el script, el cual se encuentra escrito en lenguaje Bash.

Editar el script letsencrypt-auto:

emi@devuan:~$ cd letsencrypt/
emi@devuan:~/letsencrypt$ nano letsencrypt-auto

Dentro del mismo, realizar las siguientes modificaciones. En el editor nano se puede utilizar la combinación de teclas Ctrl+W para buscar texto. En vi, el comando para buscar es la barra (/).

1- Cambiar la línea:

    pip install virtualenv

Por:

    pip --proxy http://proxy.linuxito.com:8080 install virtualenv

2- Cambiar la línea:

    from urllib2 import build_opener, HTTPHandler, HTTPSHandler

Por:

    from urllib2 import build_opener, HTTPHandler, HTTPSHandler, ProxyHandler

3- Cambiar la línea:

        opener = build_opener(HTTPSHandler())

Por:

        opener = build_opener(HTTPSHandler(),ProxyHandler({'https': 'http://proxy.linuxito.com:8080'}))

4- Cambiar la línea:

        check_output('pip install --no-index --no-deps -U ' +

Por:

        check_output('pip --proxy http://proxy.linuxito.com:8080 install --no-index --no-deps -U ' +

5- Cambiar la línea:

      "$VENV_BIN/pip" install --no-cache-dir --require-hashes -r "$TEMP_DIR/letsencrypt-auto-requirements.txt"

Por:

      "$VENV_BIN/pip" --proxy http://proxy.linuxito.com:8080 install --no-cache-dir --require-hashes -r "$TEMP_DIR/letsencrypt-auto-requirements.txt"

6- Y por último, cambiar la línea:

      PIP_OUT=`"$VENV_BIN/pip" install --no-cache-dir --require-hashes -r "$TEMP_DIR/letsencrypt-auto-requirements.txt" 2>&1`

Por:

      PIP_OUT=`"$VENV_BIN/pip" --proxy http://proxy.linuxito.com:8080 install --no-cache-dir --require-hashes -r "$TEMP_DIR/letsencrypt-auto-requirements.txt" 2>&1`

Realizar las mismas modificaciones en cualquier otra aparición de pip install y guardar los cambios.

NOTA: Tener en cuenta que este script es autogenerado y se actualiza automáticamente, por lo tanto es recomendable mantener una copia del mismo para no perder los cambios.

Luego es posible ejecutar el script, teniendo bien configuradas las variables de entorno de Bash en el entorno desde donde se lanzará el cliente:

root@devuan:/home/emi/letsencrypt# export http_proxy="http://proxy.linuxito.com:8080"
root@devuan:/home/emi/letsencrypt# export https_proxy=$http_proxy
root@devuan:/home/emi/letsencrypt# export HTTP_PROXY=$http_proxy
root@devuan:/home/emi/letsencrypt# export HTTPS_PROXY=$http_proxy

Por ejemplo:

root@devuan:/home/emi/letsencrypt# ./letsencrypt-auto certonly -a manual -d linuxito.com -d www.linuxito.com --server https://acme-v01.api.letsencrypt.org/directory --agree-dev-preview

Luego trataré de enviar los cambios necesarios al repositorio en GitHub, para que el equipo de desarrollo de Let's Encrypt lo implemente de alguna forma, y ya no sea necesario realizar estas modificaciones.


Tal vez pueda interesarte


Compartí este artículo