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

Estado de construcción travis Estado de construcción semaphore

  1. Usar molecule para mejores pruebas.

Licencia

MIT

Información del Autor

Este rol fue creado en 2016 y mejorado en 2017 por Martin V..

Acerca del proyecto

Install and configure [`dehydrated`](https://github.com/lukas2511/dehydrated). Create user for privilege dropping and cron configuration for certificate renewals.

Instalar
ansible-galaxy install martin-v.letsencryptsh
Licencia
mit
Descargas
756
Propietario
Freelance software developer and IT consultant