Установка 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. Подготовка сервера
- ОС – любой современный дистрибутив Linux (Ubuntu 22.04, Debian 11, CentOS 8).
- Веб‑сервер – nginx или Apache. В примерах будем использовать
nginx. - Доступ к 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 – они усиливают доверие и ускоряют работу сайта.
Практика для закрепления
-
Получите сертификат для тестового домена
testpbn.local(используйте--standalone‑плагин, если у вас нет nginx).- Команда:
sudo certbot certonly --standalone -d testpbn.local. - Что будет записано в
/etc/letsencrypt/live/testpbn.local/?
- Команда:
-
Создайте конфиг
nginxдля доменаmyblog.example.com, включив в него HSTS и OCSP‑Stapling. Сохраните файл вsites-availableи активируйте.- Какой параметр отвечает за автоматическое перенаправление с HTTP на HTTPS?
-
Напишите Bash‑скрипт, который считывает список доменов из
domains.txt, генерирует для каждого конфиг и сразу же запрашивает сертификат через Certbot.- Какие команды должны быть в скрипте для обработки ошибок (например, если запрос сертификата провалился)?
-
Тестируйте обновление: выполните
sudo certbot renew --dry-run. Что будет выведено, если один из доменов уже имеет истёкший сертификат? -
Оцените безопасность: в конфиге
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 при старте - быстрая диагностика
