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
- дом для пользователя, подписывающего и копирующего сертификаты
- /etc/ssl/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
Prepare the system for using Let's Encrypt
ansible-galaxy install inofix/ansible-acme-setup