martin-v.letsencryptsh
deshidratado
Instalar y configurar deshidratado
. Crea un usuario para reducir privilegios y la configuración de cron para la renovación de certificados.
Deshidratado trabaja con tus claves privadas, así que ten cuidado y revisa el código de este rol de ansible y el script de deshidratado.
Para un ejemplo de configuración con nginx como proxy https, echa un vistazo al rol de ansible martin-v/ansible-nginx_https_only.
Requerimientos
El rol se instala en el host:
- openssl
- curl
- sed
- grep
- mktemp
- git
Este rol necesita un servidor web que sirva el directorio configurado en dehydrated_challengesdir
(por defecto: /var/www/dehydrated/
) en la ubicación http://<tu-dominio>/.well-known/acme-challenge/
para todos los dominios solicitados para certificados.
Variables del Rol
Variables Requeridas:
dehydrated_contactemail
Dirección para la cuenta de letsencrypt. Principalmente para notificaciones sobre la expiración del certificado, aunque esto no debería suceder si el trabajo cron funciona correctamente.
dehydrated_contactemail: certmaster@example.com
dehydrated_letsencrypt_agreed_terms
Para aceptar los términos de servicio de letsencrypt, establece la variable dehydrated_letsencrypt_agreed_terms
a la URL actual de la licencia. Puedes encontrar la URL actual en https://acme-v01.api.letsencrypt.org/terms.
dehydrated_letsencrypt_agreed_terms: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
dehydrated_domains
Lista de dominios para solicitudes de certificados. Se creará un certificado por cada línea, en la carpeta /etc/dehydrated/certs/
con el nombre del primer dominio en la línea. El primer dominio es el nombre común, los demás en la línea serán nombres alternativos para el certificado.
dehydrated_domains: |
example.com
example.org www.example.org blog.example.org
dehydrated_deploy_cert
Los certificados deben ser legibles para servicios como apache o dovecot. Pero solo los servicios específicos deben tener permiso para leer el certificado de este servicio. Por lo tanto, debemos cambiar el propietario/grupo a un valor específico para cada certificado. Por razones de seguridad, esto solo puede hacerlo el usuario root.
Para tener una solución genérica, existe la variable dehydrated_deploy_cert
. Esta variable debe contener un script bash para las implementaciones de certificados. Las tareas típicas en la implementación son copiar el certificado a otros directorios, cambiar el propietario/permisos del archivo y reiniciar los servicios.
Este código se llama de manera similar a los ganchos normales de deshidratado, pero después de la ejecución completa de deshidratado y con permisos de root. El código se llama una vez por cada certificado que se haya producido.
Parámetros:
DOMAIN
El nombre de dominio principal, es decir, el nombre común (CN) del certificado.KEYFILE
(Nombre de archivo: privkey.pem) La ruta del archivo que contiene la clave privada.CERTFILE
(Nombre de archivo: cert.pem) La ruta del archivo que contiene el certificado firmado.FULLCHAINFILE
(Nombre de archivo: fullchain.pem) La ruta del archivo que contiene la cadena de certificados completa.CHAINFILE
(Nombre de archivo: chain.pem) La ruta del archivo que contiene el/los certificados intermedios.TIMESTAMP
(Nombre de archivo: chain.pem) Marca de tiempo cuando se creó el certificado especificado.
Ejemplo:
dehydrated_deploy_cert: |
mkdir -p /etc/nginx/ssl/${DOMAIN}
cp "${KEYFILE}" "${CERTFILE}" "${FULLCHAINFILE}" "${CHAINFILE}" /etc/nginx/ssl/${DOMAIN}
chown root:root /etc/nginx/ssl/${DOMAIN}/*
chmod 600 /etc/nginx/ssl/${DOMAIN}/*
systemctl restart nginx.service
dehydrated_run_cron_on_every_ansible_run
Este rol activa el script cron en cada ejecución para crear o actualizar los certificados. Para deshabilitar este comportamiento, usa:
dehydrated_run_cron_on_every_ansible_run: false
Variables Opcionales:
dehydrated_challengesdir
Directorio para archivos acme-challenge. Tu servidor web debería hacer que este directorio sea público en la ubicación http://<tu-dominio>/.well-known/acme-challenge/
para todos los dominios listados anteriormente. Este directorio se creará si no existe. Solo debe ser escribible por el usuario deshidratado y legible por tu servidor web, esto será impuesto por este rol.
dehydrated_challengesdir: /var/www/dehydrated/
Más variables
También hay algunas variables inusuales para superusuarios que necesitan más control, para más detalles mira defaults/main.yml
.
Dependencias
Ninguna.
Ejemplo de Playbook
- hosts: all
remote_user: root
vars_files:
- dehydrated_vars.yml
roles:
- martin-v.dehydrated
Ejemplo de archivo de variables
dehydrated_contactemail: [email protected]
dehydrated_letsencrypt_agreed_terms: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
dehydrated_domains: |
example.com
example.org www.example.org blog.example.org
dehydrated_deploy_cert: |
mkdir -p /etc/nginx/ssl/${DOMAIN}
cp "${KEYFILE}" "${CERTFILE}" "${FULLCHAINFILE}" "${CHAINFILE}" /etc/nginx/ssl/${DOMAIN}
chown root:root /etc/nginx/ssl/${DOMAIN}/*
chmod 600 /etc/nginx/ssl/${DOMAIN}/*
systemctl restart nginx.service
Consejos
Para crear certificados en la implementación de ansible, puedes llamar al script cron regular: shell: "/etc/cron.weekly/dehydrated"
. La carpeta tests
contiene un ejemplo completo en funcionamiento.
Para importar desde el cliente oficial de letsencrypt, echa un vistazo a la página wiki de importación de deshidratado.
Tareas abiertas
- Usar molecule para mejores pruebas.
Licencia
MIT
Información del Autor
Este rol fue creado en 2016 y mejorado en 2017 por Martin V..
Install and configure [`dehydrated`](https://github.com/lukas2511/dehydrated). Create user for privilege dropping and cron configuration for certificate renewals.
ansible-galaxy install martin-v.letsencryptsh