Создание сертификата Let’s Encrypt для домена и всех поддоменов
Друзья, всем привет! Создание сертификата Let’s Encrypt вручную — это процесс, который можно выполнить с помощью инструмента certbot (ACME-клиента). Let’s Encrypt использует протокол ACME (Automated Certificate Management Environment) для автоматизации выдачи сертификатов, но «вручную» обычно подразумевается выполнение команд без автоскриптов. В рамках заметки, размещая пошаговую инструкцию для создания сертификата на Linux (например, Ubuntu), используя certbot, с последующим его добавление в конфигурацию nGinx.
Требования
Домен, для которого создается сертификат (например, example.com).
Доступ к серверу с установленной ОС (например, через SSH).
Возможность настроить DNS или веб-сервер для подтверждения владения доменом.
Установленный certbot (или другой ACME-клиент).
Шаг 1: Установка Certbot
Если Certbot еще не установлен, установите его:
На Ubuntu/Debian:
sudo apt update sudo apt install certbot |
На CentOS/RHEL:
sudo yum install epel-release sudo yum install certbot |
Проверьте версию:
certbot --version |
Шаг 2: Выбор метода подтверждения владения доменом
Let’s Encrypt требует доказать, что вы владеете доменом. Есть два основных метода:
DNS-01: Добавление TXT-записи в DNS
Данный вариант подходит, если вы не хотите использовать веб-сервер или нужно получить wildcard-сертификат (*.example.com).
Шаг 3: Создание сертификата
Запустите Certbot:
sudo certbot certonly --manual --preferred-challenges dns -d example.com -d *.example.com |
Certbot покажет TXT-запись, которую нужно добавить в DNS:
Please deploy a DNS TXT record under the name _acme-challenge.example.com with the following value: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
Зайдите в панель управления вашего DNS-провайдера (например, Cloudflare, Namecheap) и добавьте TXT-запись:
Имя: _acme-challenge.example.com
Значение: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Подождите 5-10 минут, чтобы DNS обновился. Проверьте:
dig -t TXT _acme-challenge.example.com |
кстати вы можете использовать созданный для этого мною сервис, проверки DNS записей домена, доступный по ссылке. Перейдите по ссылке, укажите домен _acme-challenge.example.com и тип записи TXT, нажмите «Получить данные». Если возвращаемое значение TXT соответствует тому, что вы прописали в настройках DNS домена(значит данные уже обновились), можно в консоли с выводом certbot, нажать клавишу для продолжения проверки.
Шаг 4: Получение сертификата
После успешной проверки Certbot сохранит сертификаты в:
/etc/letsencrypt/live/example.com/
fullchain.pem — полный сертификат (сертификат + цепочка).
privkey.pem — приватный ключ.
Шаг 5: Использование сертификата
Скопируйте файлы в нужное место для вашего веб-сервера (например, Nginx или Apache) и настройте их в конфигурации.
Пример для Nginx:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live Eexample.com/privkey.pem;
} |
Перезапустите сервер:
sudo systemctl restart nginx |
Шаг 6: Обновление сертификата
Сертификаты Let’s Encrypt действуют 90 дней. Для проверки и обновления вручную:
sudo certbot renew --dry-run # Тестовый запуск sudo certbot renew # Реальное обновление |
Для автоматизации добавьте в cron:
crontab -e 0 0 * * * certbot renew --quiet |
Повторно подтверждать права на владение доменом при перевыпуске сертификата не нужно!
Шаг 7: Обновление сертификата (с помощью API Cloudflare)
При ручном выпуске сертификатов, обновление описанное в шаге 6 может вызывать ошибку:
The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',) |
Это связано с тем, что сертификат был создан с использованием плагина —manual. Плагин —manual не предназначен для автоматического обновления, так как он требует ручного вмешательства для подтверждения владения доменом (например, через DNS-записи). Чтобы автоматизировать процесс, нужно использовать плагин для автоматической проверки владения доменом. Например, если ваш провайдер DNS поддерживает API (как Cloudflare, Route 53, DigitalOcean и т.д.), можно использовать соответствующий DNS-плагин. В моем случае это Cloudflare, для поэтому проделываем следующее:
1. Устанавливаем плагин для Cloudflare:
sudo yum install python3-certbot-dns-cloudflare |
2. Создаем файл с API-ключами Cloudflare (например, /etc/letsencrypt/cloudflare.ini):
dns_cloudflare_email = your-email@example.com dns_cloudflare_api_key = your-cloudflare-api-key |
3. Не забываем про права доступа:
sudo chmod 600 /etc/letsencrypt/cloudflare.ini |
4. Обновляем сертификат с использованием DNS-плагина:
sudo certbot renew --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini |
5. Перезапускаем nGinx:
sudo systemctl restart nginx |
6. Пишем скрипт на Bash для автоматического обновления /root/certbot.sh с таким содержимым:
#!/bin/bash certbot renew --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini systemctl restart nginx |
7. Добавляем его на автозапуск раз в день в Crontab.

Автор:






