acme-setup

Acme Настройка

Это роль Ansible для настройки всего необходимого для подписания сертификатов с Let's Encrypt, т.е. установка пользователя, необходимых директорий и скриптов, а также правильная настройка прав доступа.

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

Смотрите inofix.acme-request для создания закрытого ключа и запросов сертификатов, соответственно, установки удалённого запроса на хосте "подписании" или "сертификат-прокси".

Роль inofix.acme-tiny-install устанавливает скрипт acme-tiny на "подписывающих" хостах.

Роли inofix.acme-tiny-sign / inofix.acme-tiny-cron отвечают за фактическое (соответственно периодическое) подписывание на "подписывающих" хостах.

Любой хост, который подписывает сертификаты с помощью сервиса Let's Encrypt, требует веб-сервера, слушающего на порту 80 и разрешающего /.well-known/acme-challenge к директории, доступной для инструмента подписания — смотрите inofix.acme-sign для примера.

Хосты, полагающиеся на другие хосты для подписания (например, у них нет установленного веб-сервиса), могут получать и передавать готовые подписанные сертификаты со своего прокси-хоста с помощью inofix.acme-proxy.

Смотрите "Обзор / Концепция" ниже для деталей.

Разработка этой роли началась как zwischenloesung.acme-tiny-setup.

Почему мы не используем одну из существующих ролей?

  • По первой причине читайте раздел "Обещание" ниже. Нам нужно что-то надежное.
  • Эта роль будет использоваться maestro и должна следовать логике, используемой там. (Конечно, роль можно использовать и без maestro..)

Состояние

preSTABLE (Заморозка Функций/RC)

Обещание

Конечно, эта роль может измениться в будущем, но мы будем только расширять функции, чтобы не нарушить обратную совместимость.

Если радикальные изменения станут необходимыми, будет создана новая роль, вероятно, с суффиксом версии...

Установка

# ansible-galaxy install inofix.acme-setup

Требования

  • Ansible >2.0
  • Python 2/3 на целевом хосте
  • Общий UNIX с FHS
  • Sudo
  • Systemd (по умолчанию)

Обзор / Концепция

Поскольку это на самом деле центральная роль и единственная роль, нужная на любом вовлеченном хосте, в этом README предоставлен обзор.

Перспектива Роли

  • inofix.acme-setup
    • выполняется на любом хосте
    • настраивает окружение
      • создает пользователя 'acme'
      • создает ключи и т.д.
        • /etc/ssl/acme
          • скрипты
          • связанные сервисы
        • /var/log/acme
          • логи
        • /var/lib/acme
          • дом для пользователя, подписывающего и копирующего сертификаты
  • inofix.acme-request
    • выполняется на хостах, использующих или подписывающих сертификат
    • на хостах, использующих сертификат
    • создает закрытый ключ
    • создает запрос на сертификат (csr)
    • на прокси-хостах
    • устанавливает csr от "офлайн" хостов
  • inofix.acme-tiny-install
    • выполняется на хостах, подписывающих сертификаты с Let's Encrypt
    • устанавливает скрипт acme-tiny.py
  • inofix.acme-tiny-sign
    • выполняется на хостах, подписывающих сертификаты с Let's Encrypt
    • нужен только csr: закрытый ключ даже не читается (или отсутствует для прокси)
    • использует acme-tiny.py, чтобы попросить Let's Encrypt подписать сертификат для csr
  • inofix.acme-tiny-cron
    • выполняется на хостах, подписывающих сертификаты с Let's Encrypt
    • нужен только csr: закрытый ключ даже не читается (или отсутствует для прокси)
    • устанавливает cron-задачу для выполнения части подписания (как в inofix.acme-tiny-sign)
  • inofix.acme-proxy
    • выполняется на хостах, использующих сертификат, но не выполняющих подписание самостоятельно (например, почта/jabber и т.д.)
    • копирует сертификат с удаленного хоста (который подписал)
  • inofix.acme-service-..
    • выполняется на всех хостах, использующих сертификат (т.е. работающих с сертифицированным сервисом...)
    • регистрирует сервис для перезапуска, если какой-либо сертификат изменился

Перспектива Хоста

  • Хост, который действует только как хост для подписания и сам не имеет служб, использующих сертификаты, должен будет запустить эти роли:
    • inofix.acme-setup (эта роль)
    • inofix.acme-tiny-install
    • inofix.acme-tiny-sign
    • inofix.acme-tiny-cron (чтобы автоматически повторять подписание раз в месяц)
  • Хост, который только использует сертификаты, но не запрашивает подписку напрямую с Let's Encrypt, должен будет запустить эти роли:
    • inofix.acme-setup (эта роль)
    • inofix.acme-request
    • inofix.acme-proxy (чтобы автоматически получать сертификаты с удаленного хоста)
    • inofix.acme-service-<service> (чтобы перезапустить сервис, если сертификат изменился)
  • Хост, который запускает как инструмент запроса подписи, так и определенный сервис, должен будет запустить эти роли:
    • inofix.acme-setup (эта роль)
    • inofix.acme-tiny-install
    • inofix.acme-request
    • inofix.acme-tiny-sign
    • inofix.acme-tiny-cron (чтобы автоматически повторять подписание раз в месяц)
    • inofix.acme-service-<service> (чтобы перезапустить сервис, если сертификат изменился)

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

  • app__acme__user - необязательно, по умолчанию='acme'
  • app__acme__group - необязательно, по умолчанию='acme'
  • app__acme__home - необязательно, по умолчанию='/var/lib/acme'
  • app__acme__config_dir - необязательно, по умолчанию='/etc/ssl/acme'
  • app__acme__openssl_config - необязательно, по умолчанию='/etc/ssl/openssl.cnf'
  • app__acme__challenge_dir - необязательно, по умолчанию='/var/www/acme-challenges'
  • app__acme__scripts_dir - необязательно, по умолчанию='/etc/ssl/acme/scripts'
  • app__acme__service_dir - необязательно, по умолчанию='/etc/ssl/acme/service.d'
  • app__acme__bin_dir - необязательно, по умолчанию='/usr/local/bin'
  • app__acme__account_key - необязательно, по умолчанию='account.key'
  • app__acme__key_length - необязательно, по умолчанию=4096
  • app__acme__ssh_keytype - необязательно, по умолчанию='rsa'
  • app__acme__log_dir - необязательно, по умолчанию='/var/log/acme'
  • app__acme__letsencrypt_certs - необязательно, по умолчанию=[ {url='https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem', file='intermediate.crt'}, {url='https://letsencrypt.org/certs/isrgrootx1.pem', file='ca.crt'} ]
  • app__acme__cron_minute - необязательно, по умолчанию='11'
  • app__acme__cron_hour - необязательно, по умолчанию='5'
  • app__acme__cron_day - необязательно, по умолчанию='*'
  • app__acme__cron_month - необязательно, по умолчанию='*'
  • app__acme__cron_year - необязательно, по умолчанию='*'
  • fqdn - необязательно, по умолчанию={{ ansible_fqdn | d(inventory_hostname ) }}
  • workdir - необязательно, по умолчанию=/tmp (локальный каталог, используется для обмена ssh-ключами)

Зависимости

Пример Playbook

- hosts: servers
  roles:
     - inofix.acme-setup

Смотрите https://raw.githubusercontent.com/inofix/common-playbooks/master/setup-lets-encrypt.yml для полного playbook с включенными всеми соответствующими ролями.

Лицензия

GPLv3

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

  • Майкл Лустенбергер на inofix.ch
Установить
ansible-galaxy install inofix/ansible-acme-setup
Лицензия
gpl-3.0
Загрузки
495
Владелец
INOFIX is a Luzern based software company focused on the development of free software and system solutions.