Certbot (Русский)
Certbot — ACME-клиент от Фонда Электронных Рубежей, написанный на Python и обеспечивающий такие удобства, как автоматическая настройка веб-сервера и встроенный веб-сервер для вызова HTTP. Certbot рекомендован Let's Encrypt.
Установка
Установите пакет certbot.
Также доступны плагины для автоматической настройки и установки выданных сертификатов на веб-серверах:
- Плагин для nginx предоставляется пакетом certbot-nginx.
- Плагин для Apache HTTP Server предоставляется пакетом certbot-apache.
Настройка
Обратитесь к документации Certbot для получения дополнительной информации о создании и использовании сертификатов.
Плагины
Nginx
Плагин certbot-nginx предоставляет автоматическую настройку Nginx (Русский). Он пытается найти конфигурацию каждого домена, а также добавляет рекомендованные для безопасности параметры, настройки использования сертификатов и пути к сертификатам Certbot. См. примеры в разделе #Управление блоками server в Nginx.
Первоначальная настройка блоков server:
# certbot --nginx
Обновить сертификаты:
# certbot renew
Изменить сертификаты без изменения файлов конфигурации nginx:
# certbot --nginx certonly
См. статью Certbot-Nginx on Arch Linux для получения дополнительной информации и раздел #Автоматическое обновление.
Управление блоками server в Nginx
Следующий пример можно использовать во всех блоках server при управлении этими файлами вручную:
/etc/nginx/sites-available/example
server { listen 443 ssl http2; listen [::]:443 ssl http2; # Cлушать IPv6 ssl_certificate /etc/letsencrypt/live/''домен''/fullchain.pem; # Управляется Certbot'ом ssl_certificate_key /etc/letsencrypt/live/''домен''/privkey.pem; # Управляется Certbot'ом include /etc/letsencrypt/options-ssl-nginx.conf; .. }
См. раздел Nginx (Русский)#TLS/SSL[ссылка недействительна: раздел не найден] для получения более подробной информации.
Также можно создать отдельный конфигурационный файл и включать его в каждый блок server:
/etc/nginx/conf/001-certbot.conf
ssl_certificate /etc/letsencrypt/live/''домен''/fullchain.pem; # Управляется Certbot'ом ssl_certificate_key /etc/letsencrypt/live/''домен''/privkey.pem; # Управляется Certbot'ом include /etc/letsencrypt/options-ssl-nginx.conf;
/etc/nginx/sites-available/example
server { listen 443 ssl http2; listen [::]:443 ssl http2; # Слушать IPv6 include conf/001-certbot.conf; .. }
Apache
Плагин certbot-apache предоставляет автоматическую настройку Apache HTTP Server (Русский). Он пытается найти конфигурацию каждого домена, а также добавляет рекомендованные для безопасности параметры, настройки использования сертификатов и пути к сертификатам Certbot. См. примеры в разделе #Управление виртуальными хостами Apache.
Первоначальная настройка виртуальных хостов[ссылка недействительна: раздел не найден]:
# certbot --apache
Обновить сертификаты:
# certbot renew
Изменить сертификаты без изменения файлов конфигурации apache:
# certbot --apache certonly
См. статью Certbot-Apache on Arch Linux для получения дополнительной информации и раздел #Автоматическое обновление.
Управление виртуальными хостами Apache
Следующий пример можно использовать во всех виртуальных хостах[ссылка недействительна: раздел не найден] при управлении этими файлами вручную:
См. раздел Apache HTTP Server (Русский)#TLS/SSL[ссылка недействительна: раздел не найден] для получения более подробной информации.
Webroot
При использовании webroot-метода, клиент Certbot размещает ответ на вызов (challenge response) по адресу , который используется для проверки.
Использование этого метода более рекомендовано, чем полностью ручная установка (manual-метод), так как он допускает автоматическое обновление сертификатов и упрощает управление ими. Однако использование плагинов может быть более предпочтительным, так как они обеспечивают полностью автоматическую настройку и установку.
Сопоставление (mapping) запросов ACME-challenge
Управление может быть упрощено путём сопоставления всех HTTP-запросов для /.well-known/acme-challenge/
в одну папку, например. .
Этот каталог должен быть доступен для записи клиенту Certbot и веб-серверу (nginx или apache, запущенными под пользователем http):
# mkdir -p /var/lib/letsencrypt/.well-known # chgrp http /var/lib/letsencrypt # chmod g+s /var/lib/letsencrypt
nginx
Создайте файл с блоком и включите его в блок :
Пример конфигурации блока :
Apache
Создайте файл :
Включив это в :
/etc/httpd/conf/httpd.conf
Include conf/extra/httpd-acme.conf
Получение сертификат(ов)
Запросите сертификат для domain.tld
, используя в качестве общедоступного пути:
# certbot certonly --email email@example.com --webroot -w /var/lib/letsencrypt/ -d domain.tld
Чтобы добавить (под)домен, включите все зарегистрированные домены, используемые в текущей установке:
# certbot certonly --email email@example.com --webroot -w /var/lib/letsencrypt/ -d domain.tld,sub.domain.tld
Чтобы обновить (все) текущий сертификат(ы):
# certbot renew
Смотрите #Автоматическое обновление в качестве альтернативного варианта.
Вручную
Если для используемого веб-сервера нет плагина, воспользуйтесь следующей командой:
# certbot certonly --manual
Если вы предпочитаете использовать DNS-запрос (запись TXT), используйте:
# certbot certonly --manual --preferred-challenges dns
Это автоматически проверяет ваш домен и создаёт закрытый ключ и пару сертификатов. Они будут размещены в , а в каталоге будут созданы символические ссылки на них.
Затем вы можете вручную настроить веб-сервер для использования ключа и сертификата из каталога с символическими ссылками.
Расширенная настройка
systemd
Создайте systemd-службу :
Если вы не используете плагин для управления веб-сервером, то его нужно будет перезагружать вручную для применения обновлённых сертификатов. Это можно сделать добавлением --deploy-hook "systemctl reload nginx.service"
к команде . Разумеется, используйте вместо nginx.service
, если необходимо.
Добавьте таймер для проверки продления сертификата дважды в день и включите рандомизированную задержку, чтобы все запросы на продление были равномерно распределены в течение дня для уменьшения загрузки сервера Let's Encrypt :
Автоматическое обновление wildcard-сертификатов
Процесс довольно прост. Для выпуска wildcard-сертификата необходимо выполнить DNS challenge request, используя протокол ACMEv2.
В то время как выпуск wildcard-сертификата вручную прост, его не так просто автоматизировать. DNS challenge представляет собой запись TXT, предоставленную клиентом certbot, которую необходимо установить вручную в DNS.
Нужно будет обновлять DNS при каждом обновлении сертификатов. Чтобы не делать это вручную, воспользуйтесь rfc2136, для которого в Certbot есть плагин, упакованный в . Также необходимо настроить DNS-сервер, чтобы разрешить динамическое обновление TXT-записей.
Настройка BIND для rfc2136
Сгенерируйте секретный TSIG-ключ:
$ tsig-keygen -a HMAC-SHA512 example-key
и добавьте его в файл конфигурации:
Настройка certbot для rfc2136
Сгенерируйте файл конфигурации для плагина rfc2136.
/etc/letsencrypt/rfc2136.ini
dns_rfc2136_server = '''IP.АД.РЕ.С''' dns_rfc2136_name = '''example-key''' dns_rfc2136_secret = '''ВСТАВЬТЕ_КЛЮЧ_БЕЗ_КАВЫЧЕК''' dns_rfc2136_algorithm = HMAC-SHA512
Защитите файл с помощью chmod, убрав группу и другие разрешения, так как он содержит копию секретного ключа.
Запустите тест:
# certbot certonly --dns-rfc2136 --force-renewal --dns-rfc2136-credentials /etc/letsencrypt/rfc2136.ini --server https://acme-v02.api.letsencrypt.org/directory --email example@domain.ltd --agree-tos --no-eff-email -d 'domain.ltd' -d '*.domain.ltd'
Если проверка успешно пройдена и сертификаты получены, можно автоматизировать Certbot. В ином случае, что-то пошло не так и необходимо отладить вашу установку. Теперь всё сводится к запуску , см. #Автоматическое обновление.
Смотрите также
- Transport Layer Security#ACME clients
- Статья на Википедии
- Документация Certbot от EFF
- Список ACME-клиентов