letsencryptsh

дехидратированный

Установите и настройте dehydrated. Создайте пользователя для снижения привилегий и конфигурации cron для обновления сертификатов.

dehydrated работает с вашими закрытыми ключами, поэтому будьте осторожны и просмотрите код этой ansible-ролей и используемого скрипта dehydrated.

Для примера настройки с nginx в качестве https-прокси, посмотрите ansible-роль martin-v/ansible-nginx_https_only.

Требования

Роль устанавливает на хосте:

  • openssl
  • curl
  • sed
  • grep
  • mktemp
  • git

Эта роль требует веб-сервер, который обслуживает каталог, указанный в dehydrated_challengesdir (по умолчанию: /var/www/dehydrated/) по адресу http://<ваш-домен>/.well-known/acme-challenge/ для всех запрашиваемых доменов сертификатов.

Переменные роли

Обязательные переменные:

dehydrated_contactemail

Адрес для аккаунта letsencrypt. В основном для уведомлений о истечении сертификата, но это не должно происходить, если cron-задача работает хорошо.

dehydrated_contactemail: [email protected]

dehydrated_letsencrypt_agreed_terms

Чтобы принять условия использования letsencrypt, установите переменную dehydrated_letsencrypt_agreed_terms на текущий URL лицензии. Актуальный URL можно найти по адресу 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

Список доменов для запросов на сертификаты. Для каждой строки будет создан сертификат в папке /etc/dehydrated/certs/ с именем первого домена в строке. Первый домен является общим именем, остальные в строке будут альтернативными именами для сертификата.

dehydrated_domains: |
  example.com
  example.org www.example.org blog.example.org

dehydrated_deploy_cert

Сертификаты должны быть читаемы для таких сервисов, как apache или dovecot. Но только конкретным сервисам следует разрешить читать сертификат для этой службы. Поэтому мы должны изменить владельца/группу на конкретное значение для каждого сертификата. По соображениям безопасности это может быть сделано только пользователем root.

Для универсального решения существует переменная dehydrated_deploy_cert. Эта переменная должна содержать bash-скрипт для развертывания сертификатов. Типичные задачи при развертывании - это копирование сертификата в другие директории, изменение владельца/разрешений файла и перезапуск сервисов.

Этот код вызывается аналогично обычным хукам dehydrated, но после завершения полного процесса dehydrated и с правами root. Код вызывается один раз для каждого сертификата, который был создан.

Параметры:

  • DOMAIN Первичное доменное имя, т.е. общее имя сертификата (CN).
  • KEYFILE (Имя файла: privkey.pem) Путь к файлу, содержащему закрытый ключ.
  • CERTFILE (Имя файла: cert.pem) Путь к файлу, содержащему подписанный сертификат.
  • FULLCHAINFILE (Имя файла: fullchain.pem) Путь к файлу, содержащему полную цепочку сертификатов.
  • CHAINFILE (Имя файла: chain.pem) Путь к файлу, содержащему промежуточные сертификаты.
  • TIMESTAMP (Имя файла: chain.pem) Метка времени, когда был создан указанный сертификат.

Пример:

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

Эта роль запускает скрипт cron при каждом выполнении для создания или обновления сертификатов. Чтобы отключить это поведение, используйте:

dehydrated_run_cron_on_every_ansible_run: false

Опциональные переменные:

dehydrated_challengesdir

Каталог для файлов acme-challenge. Ваш веб-сервер должен сделать этот каталог общедоступным по адресу http://<ваш-домен>/.well-known/acme-challenge/ для всех перечисленных доменов. Этот каталог будет создан, если он не существует. Он должен быть только доступен для записи пользователя dehydrated и читаемым для вашего веб-сервера, что будет обеспечено этой ролью.

dehydrated_challengesdir: /var/www/dehydrated/

Другие переменные

Также есть несколько необычных переменных для суперпользователя, которому нужно больше контроля. Для подробностей смотрите файл defaults/main.yml.

Зависимости

Нет.

Пример плейбука

- hosts: all
  remote_user: root
  vars_files:
    - dehydrated_vars.yml
  roles:
    - martin-v.dehydrated

Пример файла переменных

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

Советы

Чтобы создать сертификаты при развертывании ansible, вы можете вызвать обычный скрипт cron: shell: "/etc/cron.weekly/dehydrated". Папка tests содержит полный рабочий пример.

Для импорта из официального клиента letsencrypt посмотрите страницу импорта dehydrated в вики.

Открытые задачи

Статус сборки travis Статус сборки semaphore

  1. Использовать molecule для более качественных тестов.

Лицензия

MIT

Информация об авторе

Эта роль была создана в 2016 году и улучшена в 2017 году Мартином В..

О проекте

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/ansible-dehydrated
Лицензия
mit
Загрузки
746
Владелец
Freelance software developer and IT consultant