Работа с сертификатами Let's Encrypt
Информация на этой странице находится в доработке. Информация может добавляться и изменяться.
Рассматриваем работу с сертификатами Let’s Encrypt при помощи утилиты #LeGo.
Установка LeGo
- Скачать #LeGo и распаковать в директорию
/root/apps/acme/. - Установить файл
app.hook.shв директорию/root/apps/acme/. - Изучить документацию и справку по командам для составления запросов на получение и обновление сертификатов.
- Выбрать метод получения и обновления сертификатов.
Метод HTTP-01
Let’s Encrypt выдаёт клиенту токен, клиент записывает этот токен в файл на web-сервере по пути http://example.org/.well-known/acme-challenge/<TOKEN>.
Плюсы метода:
- Легко автоматизировать без дополнительных знаний о домене.
- Работает со всеми web-серверами.
- Можно использовать для проверки IP-адресов.
Минусы метода:
- Не работает, если провайдер блокирует порт
80. - Не позволяет получать wildcard-сертификаты.
Получение сертификата
- Зарегистрировать адрес
mail@example.orgи получить сертификат с типом ключаec256для доменовexample.orgиmail.example.orgв директорию/root/apps/acme/:
- Зарегистрировать адрес
mail@example.orgи получить сертификат с типом ключаrsa4096для доменовexample.orgиmail.example.orgв директорию/root/apps/acme/:
Параметры
--accept-tos- автоматически принять соглашение.--path- путь к хранилищу сертификатов (/root/apps/acme/).--email- адрес электронной почты для регистрации и восстановления сертификата Let’s Encrypt (mail@example.org).--domains- список доменов для получения сертификата (example.orgиmail.example.co).--http- получение сертификата методомHTTP-01.--http.port- порт8080, на котором работает LeGo. Angie из статьи Angie: Установка и настройка перебрасывает запросы к.well-known/acme-challengeна порт8080.
Обновление сертификата
- Обновить сертификат с типом ключа
ec256для доменовexample.orgиmail.example.orgв директории/root/apps/acme/и запустить файлhook.shпри успешном обновлении:
- Обновить сертификат с типом ключа
rsa4096для доменовexample.orgиmail.example.orgв директории/root/apps/acme/и запустить файлhook.shпри успешном обновлении:
Параметры
--renew-hook- выполнение специального скрипта только после успешного обновления сертификата.
Задание
- Создать файл
/etc/cron.d/app_acme_example_comсо следующим содержанием:
| |
Метод DNS-01
Let’s Encrypt проверяет принадлежность домена клиенту при помощи специальной TXT-записи _acme-challenge.example.org для доменного имени.
Плюсы метода:
- Позволяет получать wildcard-сертификаты.
- Работает со множеством серверов.
Минусы метода:
- Необходимо хранить данные API от DNS-провайдера на сервере.
- DNS-провайдер может не предоставлять специальный API для изменения записей домена.
- Нельзя использовать для проверки IP-адресов.
Получение сертификата
- Зарегистрировать адрес
mail@example.orgи получить сертификат с типом ключаec256для доменовexample.orgи*.example.orgв директорию/root/apps/acme/:
| |
- Зарегистрировать адрес
mail@example.orgи получить сертификат с типом ключаrsa4096для доменовexample.orgи*.example.orgв директорию/root/apps/acme/:
| |
Параметры
CF_DNS_API_TOKEN- токен доступа #LeGo к редактированию зоныexample.org.--accept-tos- автоматически принять соглашение.--path- путь к хранилищу сертификатов (/root/apps/acme).--email- адрес электронной почты для регистрации и восстановления сертификата Let’s Encrypt (mail@example.org).--domains- список доменов для получения сертификата (example.orgи*.example.org).--dns- получение сертификата методомDNS-01.--dns.resolvers- список внешних серверов DNS для доменных имён.
Обновление сертификата
- Обновить сертификат с типом ключа
ec256для доменовexample.orgи*.example.orgв директории/root/apps/acme/и запустить файлhook.shпри успешном обновлении:
| |
- Обновить сертификат с типом ключа
rsa4096для доменовexample.orgи*.example.orgв директории/root/apps/acme/и запустить файлhook.shпри успешном обновлении:
| |
Параметры
--renew-hook- выполнение специального скрипта только после успешного обновления сертификата.
Задание
- Создать файл
/etc/cron.d/app_acme_example_comсо следующим содержанием:
| |
Метод TLS-ALPN-01
Проверка TLS-ALPN-01 выполняется через TLS handshake на порте 443. Применяется специальный протокол ALPN, чтобы на запросы валидации отвечали только серверы, знающие о таком типе проверки. Присутствует возможность использовать поле SNI, совпадающее с именем домена, для которого проводится валидация, для увеличения надёжности проверки.
Плюсы метода:
- Работает при закрытом порте
80. - Проверка выполняется исключительно на уровне TLS.
- Можно использовать для проверки IP-адресов.
Минусы метода:
- Возможно, какие-то web-серверы не поддерживают данный метод проверки.
- Не позволяет получать wildcard-сертификаты.
Настройка Angie
К сожалению, метод проверки требует не занятого порта 443. Если какой то сервис уже занимает порт 443, то этот сервис на время проверки необходимо выключить. Чтобы обойти данное ограничение, можно до-настроить Angie таким образом, чтобы он перенаправлял соединения TLS-ALPN на сервис проверки сертификатов, а остальные соединения направлял на виртуальные хосты HTTPS.
- На всех виртуальных хостах изменить порт
443на8443. - Создать балансировщик нагрузки
ALPN, добавив в файл/etc/angie/angie.confследующую конфигурацию:
| |
Получение сертификата
- Зарегистрировать адрес
mail@example.orgи получить сертификат с типом ключаec256для доменовexample.orgиmail.example.orgв директорию/root/apps/acme/:
- Зарегистрировать адрес
mail@example.orgи получить сертификат с типом ключаrsa4096для доменовexample.orgиmail.example.orgв директорию/root/apps/acme/:
Параметры
--accept-tos- автоматически принять соглашение.--path- путь к хранилищу сертификатов (/root/apps/acme/).--email- адрес электронной почты для регистрации и восстановления сертификата Let’s Encrypt (mail@example.org).--domains- список доменов для получения сертификата (example.orgиmail.example.co).--tls- получение сертификата методомTLS-ALPN-01.--tls.port- номер порта для работы #LeGo (10443).
Обновление сертификата
- Обновить сертификат с типом ключа
ec256для доменовexample.orgиmail.example.orgв директории/root/apps/acme/и запустить файлhook.shпри успешном обновлении:
- Обновить сертификат с типом ключа
rsa4096для доменовexample.orgиmail.example.orgв директории/root/apps/acme/и запустить файлhook.shпри успешном обновлении:
Параметры
--renew-hook- выполнение специального скрипта только после успешного обновления сертификата.
Задание
- Создать файл
/etc/cron.d/app_acme_example_comсо следующим содержанием:
| |
Hook
Я написал специальный hook, который должен выполняться при успешном получении сертификата. В основном, работа hook’а заключается в том, чтобы перемещать файлы сертификатов необходимые директории и перезапускать сервисы.
Установка
- Сохранить файлы
app.hook.confиapp.hook.shв директорию/root/apps/acme/.
Конфигурация приложений
В этом разделе представлены настройки использования сертификата Let’s Encrypt для различных приложений.
Postfix
- Настроить параметры в
/etc/postfix/main.cfдля доменаexample.org:
| |
- Настроить параметры в
/etc/postfix/main.cfдля доменаexample.orgс использованием сертификатов с несколькими шифрами:
| |
Dovecot
- Настроить параметры в
/etc/dovecot/dovecot.confдля доменаexample.org:
| |
MariaDB
- Настроить параметры в
/etc/mysql/my.cnfдля доменаexample.org:
| |
OpenLDAP
- Настроить параметры в
/etc/ldap/slapd.confдля доменаexample.org:
| |
Скрипт
Скрипт состоит из следующих компонентов:
app.acme.conf- файл с общими настройками.app.acme.sh- приложение ACME.app.hook.conf- файл с настройками hook’а.app.hook.sh- приложение hook’а.job.acme- задание для CRON.example.org_dns- пример конфигурации доменаexample.orgдля метода DNS-01.example.org_http- пример конфигурации доменаexample.orgдля метода HTTP-01.
Установка
- Скачать и установить скрипт:
Настройка
Параметры скрипта переопределяемые. Переопределение идёт в такой последовательности:
- Общие параметры скрипта (
app_acme.conf).- Параметры домена (
example.org).
- Параметры домена (
Общие параметры скрипта можно переопределить параметрами домена.
Общие параметры
Общие параметры для выполнения скрипта.
SERVER- сервер запроса сертификата ACME.RESOLVERS- DNS-серверы для разрешения CNAME и определения основного домена. При проверке методом DNS-01 запрос направляется на авторитарный DNS-сервер. Синтаксис:HOST:PORT. По умолчанию используются публичные DNS-серверы.DNS- DNS-провайдер домена для получения сертификата методом DNS-01.PFX_PASS- пароль для сертификата формата PFX. По умолчанию:changeit.PFX_FORMAT- формат кодирования для шифрования файла.pfx. По умолчанию:RC2.RC2- формат кодированияRC2.DES- формат кодированияDES.SHA256- формат кодированияSHA256.
PORT- порт или интерфейс, который будет прослушиваться при получении сертификата методом HTTP-01. По умолчанию::8080.DAYS- количество дней, оставшихся до истечения срока действия сертификата, необходимого для его продления. По умолчанию:30.PROXY_HEADER- выполнять проверку по указанному заголовку HTTP при заказе сертификата методом HTTP-01 за обратным PROXY-сервером. По умолчанию:Host.HTTP_TIMEOUT- значение тайм-аута HTTP в секундах. По умолчанию:0.DNS_TIMEOUT- значение тайм-аута DNS в секундах. Используется только при авторитарных запросов к DNS-серверу. По умолчанию:10.CERT_TIMEOUT- значение тайм-аута сертификата в секундах. Используется только при получении сертификатов. По умолчанию:30.REQUEST_LIMIT- общий лимит запросов ACME. По умолчанию:18.USER_AGENT- user-agent для идентификации запросов от приложения, отправляемых в CA. По умолчанию:ACME-LEGO/DOMAIN_FILE.
Параметры домена
Параметры для конфигурации домена.
DOMAINS- массив домена и его суб-доменов.EMAIL- email для регистрации на сервере ACME.TYPE- тип проверки.dns- тип проверки DNS-01.http- тип проверки HTTP-01.
Параметры hook’а
Параметры для выполнения hook’а при получении или обновлении сертификата.
DATA- директория для хранения сертификатов.SERVICES- массив сервисов, которым необходимо дать задание на перечитывание конфигурации при обновлении сертификата.
Синтаксис
Скрипт принимает параметры в следующей очередности:
DOMAIN_FILE- файл с конфигурацией домена. Желательно название файла указывать согласно имени домена.KEY- тип ключа сертификата.rsa2048- тип ключаRSA2048rsa3072- тип ключаRSA3072rsa4096- тип ключаRSA4096rsa8192- тип ключаRSA8192ec256- тип ключаEC256ec384- тип ключаEC384
ACTION- действие скрипта.run- получить новый сертификат для домена.renew- запросить обновление сертификата для домена.
Примеры
- Запустить получение сертификата ACME с типом ключа
rsa4096для доменаexample.org(файл конфигурации имеет названиеexample.org):
- Запустить получение сертификата ACME с типом ключа
ec256для доменаexample.org(файл конфигурации имеет названиеexample.org):
- Запустить обновление сертификата ACME с типом ключа
ec256для доменаexample.org(файл конфигурации имеет названиеexample.org):
Задание
Задание запускает скрипт каждый день в 03:35 и 04:35 для типа ключа RSA4096 и EC256, соответственно.