2026-09-18
Получение бесплатного SSL-сертификата Let's Encrypt (Linux и Windows)

Получение бесплатного 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 года доступен сертификат на все поддомены.

Особенности:

  1. Подтверждение только через DNS, поэтому автопродление требует плагина под конкретный DNS-провайдер. Иначе обновление — вручную.
  2. Срок — также 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *