Certbot полуручное управление

Certbot полуручное управление

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

Я понимаю, что Certbot свяжется с Let's Encrypt, чтобы отправить запрос, который по сути представляет собой токен, который Certbot должен будет найти на моем IP-адресе или DNS.

У меня есть полный контроль над сервером Apache, но это очень настраиваемая многохостинговая настройка (требуется SNI!), и я не хочу, чтобы Certbot испортил мою конфигурацию Apache, а также чтобы он запускался как root. Мы вернемся к sudoers позже.

Я уже подготовил хостинговое пространство для mta-sts.example.org, поскольку я реализуюСтрогие меры безопасности при транспортировке от почтового агента

Я указал Apache с помощью макроса, что /home/djechelon/srv/www/domains/mta-sts.example.orgэто мое рабочее пространство.

  • htdocs: контент, передаваемый по протоколу HTTP
  • htdocs-secure: контент, передаваемый по протоколу HTTPS
  • логи: логи Apache VHost
  • ssl: вот где mta-sts.example.org.{key,crt,ca_bundle?}существует

Я хотел бы попросить Certbot сделать для меня следующее:

  1. Получите вызов от LE
  2. Запишите задачу в соответствующий файл в разделе /home/djechelon/..../htdocs, и Apache будет готов ее обслужить.
  3. Попросите LE подтвердить вызов, потому что Apacheявляетсяготовы принять вызов
  4. Записать сертификат в /home/djechelon/..../ssl/. Если LE не предоставляет ca_bundle, то проблем нет, это необязательно на моем месте
  5. Проблема с перезагрузкой Apache (скоро, скорее всего, появится настройка sudoers)

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

В документации предполагается, что процесс интерактивный, поэтому мне придется вручную скопировать файл проверки и попросить Certbot связаться с LE для проверки домена.

Я считаю, что должен быть простой способ запустить простой скрипт, приведенный выше, который работает при условии, что общая ИТ-инфраструктура существует (например, вы действительно хотите запустить собственное серверное программное обеспечение) и хорошо настроена.

Любая помощь?

[Изменить] На данный момент мне удалось вызвать это интерактивно.

 certbot certonly --webroot -d mta-sts.example.org --preferred-challenges http --work-dir /home/djechelon/etc/letsencrypt --logs-dir /home/djechelon/letsencrypt-logs --config-dir /home/djechelon/etc/letsencrypt

Который запросил у меня каталог webroot и адрес электронной почты (то, что я бы с удовольствием передал в качестве параметра для будущих обновлений). Так что теперь может возникнуть вопрос: «как мне перезапустить это в будущем неинтерактивно с помощью cron?»

решение1

Я бы не хранил сертификаты в домашнем каталоге пользователя ( /home/djechelon/..../ssl/) по той причине, чтоесли пользователь удаляет файлы сертификатов, Apache не запускаетсяЯ согласен с вашими доводами о том, что лучше, если Certbot не будет вмешиваться в конфигурацию веб-сервера, но в настоящее время, похоже, вы фактически создаете ту же самую проблему, которой пытаетесь избежать, и поэтому я пытаюсь предупредить вас.

Нет смысла использовать домашний каталог для HTTP-01-вызовов или файлов журналов, также можно использовать статическую конфигурацию с Apache, используя Certbot в режиме, certonlyкак вы это уже делаете.

Мое решение для автоматического продления — использовать один и тот же рабочий каталог для всех задач HTTP-01 (из /etc/letsencrypt/renewal/example.com.conf):

# renew_before_expiry = 30 days
version = 0.31.0
archive_dir = /etc/letsencrypt/archive/example.com
cert = /etc/letsencrypt/live/example.com/cert.pem
privkey = /etc/letsencrypt/live/example.com/privkey.pem
chain = /etc/letsencrypt/live/example.com/chain.pem
fullchain = /etc/letsencrypt/live/example.com/fullchain.pem

# Options used in the renewal process
[renewalparams]
authenticator = webroot
server = https://acme-v02.api.letsencrypt.org/directory
account = 0123456789abcdef0123456789abcdef
rsa_key_size = 4096
[[webroot_map]]
example.com = /var/www/letsencrypt
www.example.com = /var/www/letsencrypt

Таким образом, можно добавить глобальный объект Alias, который обрабатывает все проблемы, но также можно применить его только к тем виртуальным хостам, где это необходимо:

<IfModule alias_module>
    Alias /.well-known/acme-challenge/ /var/www/letsencrypt/.well-known/acme-challenge/
</IfModule>

решение2

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

Не так уж и плохо. Мое решение — заменить /home/djechelon/srv/..../ssl/*на символические ссылки

Суммируя:

  1. Настройте виртуальный хостинг как обычно.
  2. Используйте команду для получения нового сертификата для нового веб-сайта
  3. Перезагрузите Apache (это нужно для настройки виртуального хоста)
  4. При обновлении используйте только certbot renewправильный рабочий каталог для запуска без прав root.

Выдача команды

 certbot certonly --webroot -d mta-sts.example.org --preferred-challenges http --work-dir [non-root-workdir --logs-dir [non-root-workdir] --config-dir [non-root-workdir]

Команда обновления ( cronвозможно, может быть -ned)

 certbot renew --work-dir [non-root-workdir --logs-dir [non-root-workdir] --config-dir [non-root-workdir]

При обновлении, конечно, следует как минимум запланировать перезагрузку Apache.

Связанный контент