Установка SSL-сертификатов на каждый домен: автоматизация через Let’s Encrypt
Дата публикации: 11.06.2026

Установка SSL-сертификатов на каждый домен: автоматизация через Let’s Encrypt

Хочу себе такие же кнопки

Установка SSL‑сертификатов на каждый домен: автоматизация через Let’s Encrypt

Что вы получите после урока

  • Понимание, почему HTTPS — это не только «модный» протокол, а реальный фактор ранжирования и защиты.
  • Навыки установки бесплатных сертификатов Let’s Encrypt на сотни доменов за один клик.
  • Готовый скрипт, который будет автоматически обновлять сертификаты и перезапускать ваш веб‑сервер.

1. Почему каждый домен в PBN нуждается в SSL

Проблема Как решает SSL Что происходит без SSL
Трафик от поисковиков Google учитывает HTTPS как доверительный сигнал. Снижение позиций, «небезопасный» индикатор в SERP.
Браузерные предупреждения Пользователь видит замок, а не «Ваше соединение не защищено». Высокий показатель отказов, падение CTR.
Скорость HTTP/2 (только по HTTPS) ускоряет загрузку страниц. Долгое время отклика, плохой пользовательский опыт.
Защита от MITM‑атак Шифрование предотвращает подмену контента. Возможна подмена ссылок, потеря доверия.

Итог: даже если домен «битый» и используется только для ссылок, наличие корректного сертификата повышает его «ценность» в глазах поисковика и пользователя.


2. Основные понятия

Термин Описание
Let’s Encrypt Бесплатный центр сертификации, выдающий сертификаты 90‑дневные.
Certbot Официальный клиент Let’s Encrypt, автоматизирующий запрос, установку и обновление сертификатов.
ACME‑протокол Протокол автоматизации выдачи сертификатов (Automatic Certificate Management Environment).
Wildcard‑сертификат Сертификат вида *.example.com, покрывающий все поддомены.
CRON‑задача Планировщик задач в Linux, позволяющий запускать скрипт каждый день/час.

3. Подготовка сервера

  1. ОС – любой современный дистрибутив Linux (Ubuntu 22.04, Debian 11, CentOS 8).
  2. Веб‑серверnginx или Apache. В примерах будем использовать nginx.
  3. Доступ к DNS – возможность быстро добавить запись TXT для ACME‑challenge.

Совет: если у вас уже настроен cPanel/`Plesk**, Certbot можно установить через их плагины, но в PBN‑проектах часто используют «чистый» сервер без панелей.

Установка Certbot

# Ubuntu / Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx

# CentOS / RHEL
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx

Важно: пакет python3-certbot-nginx автоматически вносит нужные изменения в конфигурацию nginx.


4. Запуск первого сертификата

4.1. Один домен

sudo certbot --nginx -d example.com -d www.example.com
  • --nginx — плагин, который редактирует конфиги nginx.
  • -d — список доменов, которые покрывает сертификат.

После подтверждения вы увидите сообщение:

Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem

4.2. Множественные домены (PBN‑пакет)

Если у вас 10‑20 доменов, их можно перечислить в одной команде:

sudo certbot --nginx \
  -d domain1.com -d www.domain1.com \
  -d domain2.net -d www.domain2.net \
  -d domain3.org -d www.domain3.org

Но лучше использовать файл‑список, чтобы не переполнять командную строку.

Файл domains.txt

domain1.com www.domain1.com
domain2.net www.domain2.net
domain3.org www.domain3.org

Запуск:

while read -r line; do
  domains=$(echo $line | tr ' ' ',')
  sudo certbot --nginx -d $domains
done < domains.txt

Плюс: если один из доменов уже имеет сертификат, Certbot просто обновит его, не ломая остальные.


5. Автоматическое обновление

Let’s Encrypt выдаёт сертификаты на 90 дней. Certbot уже ставит CRON‑задачу (или systemd‑таймер), но проверим.

5.1. Проверка текущего расписания

systemctl list-timers | grep certbot
# или
crontab -l | grep certbot

Ожидаемый вывод:

0 12 * * * /usr/bin/certbot renew --quiet

5.2. Тестовый запуск обновления

sudo certbot renew --dry-run

Если всё ок, вы увидите Congratulations! All renewals succeeded.

5.3. Самый надёжный способ – отдельный скрипт

Создайте файл /usr/local/bin/renew-pbn.sh:

#!/bin/bash
# renew-pbn.sh – автоматическое обновление всех сертификатов PBN

# 1. Обновляем сертификаты
/usr/bin/certbot renew --quiet --no-self-upgrade

# 2. Перезапускаем nginx только если что‑то изменилось
if /usr/bin/certbot certificates | grep -q "Certificate Name:"; then
  systemctl reload nginx
fi
chmod +x /usr/local/bin/renew-pbn.sh

Добавьте в CRON (раз в день в 2:30 утра):

30 2 * * * /usr/local/bin/renew-pbn.sh >> /var/log/renew-pbn.log 2>&1

6. Wildcard‑сертификат для всех поддоменов одного домена

Если ваш PBN‑доменные имеют множество поддоменов (blog.domain.com, shop.domain.com и т.п.), удобно использовать wildcard.

6.1. Требования

  • DNS‑01 challenge – необходимо добавить TXT‑запись в DNS.
  • Плагин certbot-dns-<provider> (например, certbot-dns-cloudflare).

6.2. Пример с Cloudflare

sudo apt install python3-pip
pip3 install certbot-dns-cloudflare

Создайте файл ~/.secrets/cloudflare.ini:

dns_cloudflare_api_token = 0123456789abcdef0123456789abcdef01234567

Защитите его:

chmod 600 ~/.secrets/cloudflare.ini

Запуск:

sudo certbot -a dns-cloudflare -i nginx \
  --dns-cloudflare-credentials ~/.secrets/cloudflare.ini \
  -d *.example.com -d example.com

Result: один сертификат покрывает любой поддомен example.com.

Важно: wildcard‑сертификаты нельзя получить через http‑01‑challenge, только через dns‑01.


7. Параметры безопасности и лучшие практики

Параметр Рекомендация
TLS‑версии Отключить TLS 1.0/1.1, включить только TLS 1.2 и TLS 1.3.
Cipher‑suite Использовать EECDH+AESGCM:EDH+AESGCM (встроено в modern nginx).
HSTS Добавьте add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; в конфиг.
OCSP‑Stapling ssl_stapling on; ssl_stapling_verify on; – ускоряет проверку статуса сертификата.
Redirect HTTP → HTTPS return 301 https://$host$request_uri; в серверном блоке listen 80.

Пример полного блока nginx для домена example.com:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
    ssl_prefer_server_ciphers on;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

    ssl_stapling on;
    ssl_stapling_verify on;

    # … ваш остальной конфиг …
}

8. Управление большим количеством доменов: скрипт‑генератор конфигов

Если у вас 100+ доменов, вручную править nginx.conf будет утомительно. Ниже – простой Bash‑скрипт, который генерирует отдельный файл конфигурации для каждого домена.

#!/usr/bin/env bash
DOMAINS_DIR="/etc/nginx/sites-available"
ENABLED_DIR="/etc/nginx/sites-enabled"
CERT_DIR="/etc/letsencrypt/live"

while read -r domain; do
  # 1. Создаём конфиг
  cat > "$DOMAINS_DIR/$domain.conf" <<EOF
server {
    listen 80;
    server_name $domain www.$domain;
    return 301 https://\$host\$request_uri;
}
server {
    listen 443 ssl http2;
    server_name $domain www.$domain;

    ssl_certificate $CERT_DIR/$domain/fullchain.pem;
    ssl_certificate_key $CERT_DIR/$domain/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
    ssl_prefer_server_ciphers on;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

    ssl_stapling on;
    ssl_stapling_verify on;

    root /var/www/$domain;
    index index.html index.htm;
}
EOF

  # 2. Включаем сайт
  ln -sf "$DOMAINS_DIR/$domain.conf" "$ENABLED_DIR/$domain.conf"
done < domains.txt

# Перезапускаем nginx
systemctl reload nginx
  • domains.txt – список доменов (по одному в строке).
  • Скрипт автоматически создаёт и включит конфиги, а также подставит пути к сертификатам, уже полученным Certbot‑ом.

Плюс: если позже добавите новый домен, достаточно добавить его в domains.txt и запустить скрипт ещё раз – всё синхронизируется без риска «сломать» другие сайты.


9. Ошибки, которые часто встречаются, и как их исправить

Ошибка Причина Как исправить
failed to retrieve certificate DNS‑запись A/CNAME не указывает на сервер, где запущен Certbot. Проверьте, что домен действительно резолвится в IP вашего сервера.
unauthorized при http‑01 Веб‑сервер не обслуживает файл .well-known/acme-challenge/. Убедитесь, что в конфиге nginx нет location / {}, перекрывающего .well-known.
rate limit exceeded Превышен лимит запросов Let’s Encrypt (50 сертификатов/домена в неделю). Сгруппируйте домены в один сертификат, используйте wildcard, или подождите 7 дней.
TLS handshake failed Сертификат не найден или путь указан неверно. Проверьте, что ssl_certificate и ssl_certificate_key указывают на существующие файлы.
OCSP stapling failed Сервер не может достучаться до OCSP‑ответа. Отключите ssl_stapling временно, проверьте сетевой доступ к ocsp.int-x3.letsencrypt.org.

10. Подытожим

  • HTTPS — неотъемлемая часть любого PBN‑домена.
  • Let’s Encrypt + Certbot позволяют получить бесплатные сертификаты за секунды.
  • Автоматизация через CRON/systemd и небольшие Bash‑скрипты избавляют от рутины даже при сотнях доменов.
  • Не забывайте о безопасных настройках TLS, HSTS и OCSP‑Stapling – они усиливают доверие и ускоряют работу сайта.

Практика для закрепления

  1. Получите сертификат для тестового домена testpbn.local (используйте --standalone‑плагин, если у вас нет nginx).

    • Команда: sudo certbot certonly --standalone -d testpbn.local.
    • Что будет записано в /etc/letsencrypt/live/testpbn.local/?
  2. Создайте конфиг nginx для домена myblog.example.com, включив в него HSTS и OCSP‑Stapling. Сохраните файл в sites-available и активируйте.

    • Какой параметр отвечает за автоматическое перенаправление с HTTP на HTTPS?
  3. Напишите Bash‑скрипт, который считывает список доменов из domains.txt, генерирует для каждого конфиг и сразу же запрашивает сертификат через Certbot.

    • Какие команды должны быть в скрипте для обработки ошибок (например, если запрос сертификата провалился)?
  4. Тестируйте обновление: выполните sudo certbot renew --dry-run. Что будет выведено, если один из доменов уже имеет истёкший сертификат?

  5. Оцените безопасность: в конфиге nginx отключите TLS 1.0/1.1 и включите только TLS 1.2+. Проверьте с помощью openssl s_client -connect mydomain.com:443 -tls1_2, что соединение успешно.

    • Какой вывод команды указывает на то, что TLS 1.0 всё ещё включён?

Выполнив эти задания, вы сможете полностью автоматизировать процесс установки и поддержания SSL‑сертификатов на всех доменах вашего PBN‑проекта. Удачной работы!


БЕСПЛАТНЫЙ КУРС: «ЦИФРОВОЙ СЕЙФ: БЫСТРОЙ БЭКАП»
Чат онлайн с возможностью отправки гифок
ИП или ООО: какая форма выгоднее для стартапа в Москве
Как использовать SAPE для защиты данных
Китайский производитель трубной арматуры
Микросервисы: как рисовать стрелки с подписями
Онлайн рулетка с поддержкой мобильных устройств
Онлайн встреча Екатеринбург
Оптимизация Битрикс на VDSina: бесплатный материал
Ошибки и их исправление при использовании SAPE
Основы и терминология LA SAPE: что это и как начать
Основы SAPE: что это и как работает
Партнёрская программа без блога: эффективные методы трафика из Telegram
Подготовка к ОГЭ: контрольные материалы
Погружение в английский без субтитров: 5 минут в день — эффективно
Путешествуйте самостоятельно: все, что нужно знать
Россия онлайн видеочат
Рулетка общения
Сбои AutoCAD при старте - быстрая диагностика