
Я хочу спросить, возможно ли использовать 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 сделать для меня следующее:
- Получите вызов от LE
- Запишите задачу в соответствующий файл в разделе
/home/djechelon/..../htdocs
, и Apache будет готов ее обслужить. - Попросите LE подтвердить вызов, потому что Apacheявляетсяготовы принять вызов
- Записать сертификат в
/home/djechelon/..../ssl/
. Если LE не предоставляет ca_bundle, то проблем нет, это необязательно на моем месте - Проблема с перезагрузкой 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/*
на символические ссылки
Суммируя:
- Настройте виртуальный хостинг как обычно.
- Используйте команду для получения нового сертификата для нового веб-сайта
- Перезагрузите Apache (это нужно для настройки виртуального хоста)
- При обновлении используйте только
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.