Получение бесплатного SSL-сертификата Let’s Encrypt (Linux и Windows)
Let’s Encrypt выдаёт бесплатные TLS-сертификаты на 90 дней с автоматическим продлением. Разберём получение и продление сертификатов в Linux (certbot, acme.sh), Windows (win-acme) и через Docker, включая wildcard и сертификат на IP-адрес.
Условия получения
- Проверка владения доменом — через TXT-запись в DNS либо через веб-сервер (файл в
/.well-known/acme-challenge/). - Срок 90 дней — нужно настроить автоматическое продление. После 60 дней можно выпустить новый.
- Домен 3-го уровня и выше должен проходить проверку на всех уровнях:
layer3.layer2.comдолжен отвечать и дляlayer2.com.
Проверка домена
Настройка веб-сервера
NGINX:
server {
listen 80;
server_name imaxis.ru;
root /usr/share/nginx/html;
}
где imaxis.ru — домен, /usr/share/nginx/html — корень NGINX.
Если сайт уже работает, добавляем в его server:
location ~ /.well-known/acme-challenge {
root /usr/share/nginx/html;
allow all;
}
Запросы к /.well-known отдаются из указанного каталога, allow all — доступ всем.
При наличии редиректов:
location ~ /.well-known/acme-challenge {
root /usr/share/nginx/html;
allow all;
}
location / {
return 301 https://$host$request_uri;
}
nginx -t && nginx -s reload
Apache:
CentOS:
vi /etc/httpd/conf.d/lets.conf
Ubuntu / Debian:
vi /etc/apache2/conf-enabled/lets.conf
Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/
apachectl configtest
systemctl restart httpd || systemctl restart apache2
Windows (IIS): сайт должен отвечать по HTTP на нужное доменное имя; в привязках узла добавляем домен для сертификата.
Через DNS
Метод проще, но автопродление возможно только для DNS с certbot-плагинами. Чаще используется для тестов. Нужен доступ к управлению DNS-записями домена.
Установка certbot
Rocky Linux:
dnf install epel-release
dnf install certbot
CentOS 8:
dnf --enablerepo=powertools install certbot
CentOS 7:
yum install certbot
Ubuntu / Debian:
apt update
apt install certbot
Универсальный через pip:
apt install python3-pip # DEB
yum install python3-pip # RPM
python3 -m pip install --upgrade pip
python3 -m pip install certbot
Windows — win-acme: скачиваем win-acme pluggable нужной разрядности и распаковываем архив.
Первое получение сертификата
Linux
Проверка через веб-сервер:
certbot certonly --webroot --agree-tos --no-eff-email --email <email> --webroot-path <путь> -d <домен> [-d <домен> ...]
где:
certonly— выпуск нового сертификата;webroot— проверка через запрос к корню сайта;agree-tos— согласие с лицензией;no-eff-email— отказ от рассылок;email— почта администратора;webroot-path— корневой каталог сайта;-d— домены.
NGINX:
certbot certonly --webroot --agree-tos --no-eff-email --email postmaster@imaxis.ru --webroot-path /usr/share/nginx/html/ -d imaxis.ru -d www.imaxis.ru
Apache:
certbot certonly --webroot --agree-tos --no-eff-email --email postmaster@imaxis.ru --webroot-path /var/www/html/ -d imaxis.ru -d www.imaxis.ru
Сертификаты появятся в /etc/letsencrypt/archive/imaxis.ru, симлинки — в /etc/letsencrypt/live/imaxis.ru. В конфигах указывайте пути до симлинков: при обновлении файлы в archive меняются, симлинки — нет. Публичный ключ — cert.pem, приватный — privkey.pem, полная цепочка — fullchain.pem.
Проверка через DNS:
certbot certonly --manual --agree-tos --email postmaster@imaxis.ru --preferred-challenges=dns -d imaxis.ru -d www.imaxis.ru
На подтверждение отвечаем Y:
Please deploy a DNS TXT record under the name
_acme-challenge.imaxis.ru with the following value:
W2SC9b88y2j2oUjhxVgS7Bphph9g5PqhkBq9KiWkLTm
Создаём TXT-запись _acme-challenge.imaxis.ru с указанным значением и нажимаем Enter. Для нескольких доменов процедура повторяется.
Windows (win-acme)
cd C:win-acme.v2.1.6.773.x64.pluggable
wacs.exe
В PowerShell — .wacs.exe.
Для получения файлов в формате PEM:
wacs.exe --store pemfiles --pemfilespath C:Certificates
В меню вводим N (новый сертификат), выбираем сайт IIS, при нескольких привязках — вариант для всех, вводим email. Утилита создаст каталог проверки, получит сертификат, добавит привязку на 443 и создаст задание автопродления в планировщике.
Автоматическое продление
Linux
В свежих версиях задание создаётся автоматически:
cat /etc/cron.d/certbot
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */12 * * * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew
При необходимости добавляем в cron вручную:
crontab -e
0 0 * * 1,4 /usr/bin/certbot renew --noninteractive
Проверка и продление — по понедельникам и четвергам в 00:00. certbot renew продлевает сертификаты, до истечения которых менее 30 дней, и обновляет симлинки.
Многие сервисы требуют перезапуска после обновления сертификата — задаём hook:
vi /etc/letsencrypt/cli.ini
deploy-hook = systemctl reload nginx
Windows
Задание автопродления создаётся при выпуске сертификата — проверить можно в планировщике заданий Windows.
Получение сертификата через Docker
Если веб-сервера нет, но есть Docker, запускаем контейнер certbot со своим веб-сервером:
docker run -it --rm --name certbot -p 80:80 -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot certonly
На первом шаге выбираем режим 1 (standalone), указываем email, принимаем лицензию, отвечаем на вопрос о рассылках (Y/N) и вводим домены:
Please enter the domain name(s) ...: imaxis.ru www.imaxis.ru
Successfully received certificate.
Продление:
docker run -it --rm --name certbot -p 80:80 -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot renew
Wildcard-сертификат (*.domain)
С 2018 года доступен сертификат на все поддомены.
Особенности:
- Подтверждение только через DNS, поэтому автопродление требует плагина под конкретный DNS-провайдер. Иначе обновление — вручную.
- Срок — также 3 месяца.
Проверяем версию certbot (нужна 0.22.0+):
certbot --version
Обновляем:
yum update certbot # RPM
apt --only-upgrade install certbot # DEB
Выпуск:
certbot certonly --manual --agree-tos --email master@imaxis.ru --server https://acme-v02.api.letsencrypt.org/directory --preferred-challenges=dns -d imaxis.ru -d *.imaxis.ru
Указываем --server (ACMEv2) и получаем сертификат и на *.imaxis.ru, и на сам imaxis.ru — первое не включает второго.
Система попросит TXT-запись:
Please deploy a DNS TXT record under the name
_acme-challenge.imaxis.ru with the following value:
DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI
В BIND:
_acme-challenge IN TXT DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI
Не спешите нажимать Enter — подождите пару минут и проверьте:
nslookup -type=txt _acme-challenge.imaxis.ru 8.8.8.8
Для первого wildcard система может попросить вторую TXT-запись — повторяем процедуру. После успеха сертификат будет в /etc/letsencrypt/live/imaxis.ru/.
Сертификат на IP-адрес
С января 2026 года Let’s Encrypt выдаёт сертификаты на IP-адрес. Нюансы:
- срок действия — 6 дней;
- версия certbot — не ниже 4;
- продление — только методом HTTP (веб-сервер на 80-м порту).
Certbot:
certbot certonly --staging --preferred-profile shortlived --webroot -w /usr/share/nginx/html --ip-address 1.2.3.4
acme.sh:
curl https://get.acme.sh | sh -s email=master@imaxis.ru
~/.acme.sh/acme.sh --issue -w /usr/share/nginx/html -d 1.2.3.4 --server letsencrypt --certificate-profile shortlived
Your cert is in: /root/.acme.sh/1.2.3.4_ecc/1.2.3.4.cer
Your cert key is in: /root/.acme.sh/1.2.3.4_ecc/1.2.3.4.key
And the full-chain cert is in: /root/.acme.sh/1.2.3.4_ecc/fullchain.cer
Нужные файлы — 1.2.3.4.key и fullchain.cer.
Автопродление:
crontab -e
0 0 * * * /root/.acme.sh/acme.sh --cron --home "/root/.acme.sh/acme.sh"
Полезные команды
certbot certificates # список сертификатов
certbot delete -d imaxis.ru # удалить сертификат
Экспорт сертификата в Windows с закрытым ключом
По умолчанию экспорт с приватным ключом недоступен. Правим settings.json в каталоге win-acme:
"PrivateKeyExportable": true,
.wacs.exe --renew --force
Файл .pfx — в %programdata%win-acme$baseuri$certificates. Пароль — в меню wacs: Manage Renewals > Show details.
Сертификат для MS Exchange
В комплекте win-acme есть скрипт ImportExchange.v2.ps1 для импорта сертификата в Exchange.
wacs.exe --source manual --host exchange.imaxis.ru,autodiscover.imaxis.ru --store centralssl,certificatestore --certificatestore My --acl-fullcontrol "network service,administrators" --centralsslstore "C:SSL" --installation iis,script --installationsiteid 1 --script "./Scripts/ImportExchange.v2.ps1" --scriptparameters "'{CertThumbprint}' 'IIS,SMTP,IMAP' 1 '{CacheFile}' '{CachePassword}' '{CertFriendlyName}'"
Команда запросит сертификат для указанных узлов, сохранит файлы в C:SSL и импортирует ключи в Exchange. В PowerShell команда начинается с .wacs.exe ....
После — в консоли управления сервером назначаем сертификат службам Exchange (SMTP, IIS).
Возможные ошибки
1. Missing command line flag or config entry for this setting
Причина: при продлении certbot ищет настройки в /etc/letsencrypt/renewal/<домен>.conf; если там не определён webroot_map, возникает ошибка.
Решение:
vi /etc/letsencrypt/renewal/imaxis.ru.conf
Внизу находим webroot_map и приводим к виду:
imaxis.ru = /usr/share/nginx/html
2. ACMEv1 is deprecated …
... ACMEv1 is deprecated and you can no longer get certificates from this endpoint. Please use the ACMEv2 endpoint ...
Причина: устаревшая версия certbot, работающая с ACMEv1.
Решение: обновить certbot:
apt --only-upgrade install certbot # Ubuntu/Debian
yum update certbot # Rocky/CentOS
3. Remote error: tls: handshake failure
Причина: Let’s Encrypt отключил устаревшие наборы шифров TLS.
Решение: обновить веб-сервер и не ограничивать ssl_protocols старыми версиями:
ssl_protocols TLSv1.2 TLSv1.3;
Устаревшие TLSv1 и TLSv1.1 не указывайте.
nginx -t && nginx -s reload
Тонкости и подводные камни
- Симлинки
live/— указывайте в конфигах именно их, а неarchive/. deploy-hook— сервисы (NGINX, Postfix, Dovecot) нужно перезагружать после обновления сертификата.- Wildcard только через DNS — HTTP-проверка для
*.domainне поддерживается. - Порт 80 — HTTP-проверка требует доступного 80-го порта; при закрытом 80 используйте DNS или standalone.
- IP-сертификаты — срок 6 дней, требуют certbot 4+ и HTTP-проверки.
- Согласованность уровней домена — для
layer3.layer2.comнужны рабочие записи и наlayer2.com. - Лимиты Let’s Encrypt — есть недельные лимиты на выпуск; тестируйте с
--staging.
Шпаргалка
# NGINX webroot
certbot certonly --webroot --agree-tos --no-eff-email --email postmaster@imaxis.ru
--webroot-path /usr/share/nginx/html/ -d imaxis.ru -d www.imaxis.ru
# DNS (manual)
certbot certonly --manual --agree-tos --email postmaster@imaxis.ru --preferred-challenges=dns -d imaxis.ru
# wildcard
certbot certonly --manual --preferred-challenges=dns -d imaxis.ru -d '*.imaxis.ru'
# IP (6 дней)
certbot certonly --preferred-profile shortlived --webroot -w /usr/share/nginx/html --ip-address 1.2.3.4
# продление
certbot renew --noninteractive
certbot certificates
Проверено на: Ubuntu 22.04/24.04, Rocky Linux 9, Windows Server (IIS) + certbot, acme.sh, win-acme.
Дата: Сентябрь 2026.