Быстро и бесплатно настроить SSL для сайта с помощью Let's Encrypt и certbot

TL;DR
Коротко: используйте бесплатный центр сертификации Let’s Encrypt и утилиту certbot. Подключитесь по SSH к серверу, установите certbot, получите сертификат командой certbot certonly и подключите его в конфигурации Nginx или Apache. Настройте автоматическое обновление (certbot renew + cron/systemd). Ниже — пошаговая инструкция, примеры конфигов, сценарии восстановления и рекомендации по безопасности.
Зачем это нужно
HTTPS теперь влияет на ранжирование в поисковых системах и даёт посетителям зашифрованное соединение. Сертификаты от Let’s Encrypt бесплатны и автоматически признаются большинством браузеров.
Краткое определение: certbot — официальная клиентская программа от EFF для получения и управления сертификатами Let’s Encrypt.
Требования и предпосылки
- У вас есть Linux-сервер с доступом по SSH.
- Домен (или поддомены) уже указывают на IP вашего сервера (A/AAAA записи).
- Установлен один из веб-серверов: Nginx или Apache.
- Вы обладаете правами администратора (sudo).
Важно: сертификаты Let’s Encrypt действуют 90 дней, поэтому рекомендуется настроить автоматическое продление.
Быстрый план действий (микро-методология)
- Подключиться к серверу по SSH.
- Проверить/установить certbot.
- Остановить HTTP-сервер (временно) при необходимости для проверки.
- Получить сертификат: certbot certonly.
- Включить HTTPS в конфиге Nginx/Apache и указать пути к сертификатам.
- Перезапустить веб-сервер и проверить работу.
- Настроить автоматическое обновление (renew).
Установка certbot
Подключитесь к серверу и проверьте версию certbot:
sudo certbot --versionЕсли команда возвращает версию, certbot уже установлен. Если нет — установите его (пример для Debian/Ubuntu):
sudo apt-get -y install certbotНа других дистрибутивах используйте пакетный менеджер (yum/dnf/pacman) или официальные инструкции Let’s Encrypt.
Получение SSL-сертификата
Перед запуском убедитесь, что домен указывает на ваш сервер. Для совместимости с разными серверами временно остановите текущий HTTP-сервис (если требуется):
sudo service nginx stopили
sudo service apache2 stopЗатем запустите:
certbot certonlycertbot предложит методы подтверждения прав на домен. Выберите 1, чтобы certbot временно поднял свой встроенный HTTP-сервер (standalone). Введите домен (например, example.com и www.example.com). Если проверка пройдена, сертификаты будут сохранены в /etc/letsencrypt/live/
Файлы, которые вам понадобятся:
- /etc/letsencrypt/live/DOMAIN/fullchain.pem — полный цепочный сертификат
- /etc/letsencrypt/live/DOMAIN/privkey.pem — приватный ключ
Важно: сохраняйте приватный ключ в безопасности и делайте резервные копии только в доверённых хранилищах.
Настройка Nginx
Найдите конфигурацию сайта (обычно в /etc/nginx/sites-enabled или /etc/nginx/conf.d).
Откройте файл, например:
sudo nano /etc/nginx/sites-enabled/default.conf- Чтобы автоматически перенаправлять HTTP на HTTPS, в серверном блоке для порта 80 добавьте:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}- Конфигурация для HTTPS (пример):
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;
# Рекомендуемые параметры безопасности (сниппет ниже)
root /var/www/html;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
}Замените example.com на ваш домен. Сохраните (Ctrl+O, Enter) и выйдите (Ctrl+X). Затем перезапустите Nginx:
sudo service nginx startПроверьте конфигурацию и статус:
sudo nginx -t
sudo systemctl status nginxЕсли браузер показывает цепочку сертификатов и замочек — всё готово.
Настройка Apache
Найдите активные виртуальные хосты:
apachectl -SОткройте конфиг сайта, например:
sudo nano /etc/apache2/sites-enabled/000-default.confДобавьте редирект с HTTP на HTTPS (в виртуальном хосте для 80 порта):
ServerName yourdomain.com
ServerAlias www.yourdomain.com
Redirect permanent / https://yourdomain.com/
Затем настройте виртуальный хост для 443 порта:
ServerName yourdomain.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
DocumentRoot /var/www/html
Замените пути и домен на ваши. Сохраните и перезапустите Apache:
sudo service apache2 startПроверьте конфигурацию:
sudo apachectl configtest
sudo systemctl status apache2Автоматическое продление
Let’s Encrypt выдаёт сертификаты на 90 дней. Для автоматического обновления используйте:
certbot renewЧасто certbot устанавливает cron или systemd-таймер автоматически. Если нет, добавьте cron-задачу, которая запускается дважды в день и обновляет сертификаты, например:
# Откройте crontab для root
sudo crontab -e
# Добавьте строку (пример, в 2:30 и 14:30):
30 2,14 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"Или используйте systemd таймер (предпочтительный способ на современных системах):
systemctl enable --now certbot-renew.timerПараметр –post-hook “systemctl reload nginx” обеспечит перезагрузку веб-сервера после обновления сертификата.
Проверка и тестирование
- Проверить дату окончания сертификата:
openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -dates- Тестировать HTTPS локально: откройте браузер и перейдите на https://ваш-домен
- Используйте онлайн-сервисы проверки (например, SSL Labs) для аудита конфигурации.
Безопасные настройки TLS (рекомендации)
Минимальные и рекомендуемые параметры шифрования для Nginx:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...';
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_ecdh_curve X25519:secp521r1:secp384r1;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;Примечание: точный список cipher’ов зависит от вашей платформы и требований совместимости. Тестируйте после изменений.
Когда Let’s Encrypt не подойдёт (ограничения и альтернативы)
- Огромное количество однотипных сертификатов для одного домена может упереться в лимиты выдачи — для массовых генераций используйте wildcard-сертификаты (требуют DNS-верификации) или коммерческие CA.
- Если у вас приватная инфраструктура без доступа из интернета — используйте корпоративный CA.
- Для интеграции с CDN/облачными балансировщиками рассмотрите Cloudflare (бесплатный план с гибридным SSL) или встроенные сертификаты провайдера.
Типичные ошибки и способы восстановления
- Ошибка: сертификат не обновляется по cron. Решение: проверьте права на /etc/letsencrypt, логи certbot (/var/log/letsencrypt), вручную запустите certbot renew –dry-run.
- Ошибка: домен не проходит валидацию. Решение: убедитесь, что DNS указывает на сервер, нигде нет временных прокси/фильтров, и порт 80 доступен для HTTP-01 проверки.
- Браузер показывает смешанный контент. Решение: проверьте, что все ресурсы (скрипты, стили, изображения) загружаются по HTTPS.
Контроль качества и критерии приёмки
- Сайт отвечает по HTTPS и показывает корректный сертификат для домена.
- Команда certbot renew проходит без ошибок в регулярных тестах (–dry-run).
- Веб-сервер перезапускается автоматически после обновления сертификатов.
- Отсутствует смешанный контент на основных страницах.
Чек-листы по ролям
Администратор:
- Проверить DNS и доступность порта 80/443.
- Установить certbot, получить сертификат, настроить автообновление.
- Настроить мониторинг срока действия сертификатов.
Разработчик:
- Исправить жестко заданные http:// ссылки в коде.
- Проверить внешние API и ресурсы на поддержку HTTPS.
DevOps:
- Настроить post-hook для перезагрузки сервисов после обновления сертификата.
- Написать тесты на CI, эмулирующие переход на HTTPS.
Дополнительно: решение принятия (decision flow)
flowchart TD
A[Сайт доступен по HTTP?] -->|Да| B[DNS указывает на сервер?]
A -->|Нет| C[Настроить веб-сервер для HTTP]
B -->|Да| D[Запустить certbot certonly]
B -->|Нет| E[Исправить DNS записи]
D --> F{Валидация пройдена?}
F -->|Да| G[Настроить Nginx/Apache и перезапустить]
F -->|Нет| H[Проверить доступность порта 80 и пробросы]Короткая галерея крайних случаев
- Поддомены, требующие wildcard — используйте DNS-01 challenge.
- Если сервер за NAT и не имеет публичного 80 порта — используйте DNS-валидацию.
- Если нужно сразу несколько доменов — указывайте их через опцию -d в certbot.
Когда и как уведомлять пользователей о переходе на HTTPS
Короткое объявление (пример для блогов/новостей):
“Мы перешли на защищённое соединение HTTPS: все данные между вашим браузером и нашим сайтом теперь шифруются.”
Резервный план и откат
Если после включения HTTPS что-то сломалось, временно верните сайт в HTTP, пока исправляете ресурсы:
- Откат конфигурации и перезапуск веб-сервера.
- Используйте журнал веб-сервера и инструменты браузера (DevTools) для поиска смешанного контента.
Часто задаваемые вопросы
- Как часто нужно обновлять сертификат? — Каждые 90 дней, но используйте автоматическое обновление.
- Могу ли я получить wildcard-сертификат бесплатно? — Да, Let’s Encrypt поддерживает wildcard через DNS-верификацию.
Заключение
Вы изучили: что такое certbot, как получить и установить SSL-сертификат от Let’s Encrypt, как настроить Nginx и Apache, как автоматизировать продление и как устранить типичные проблемы. Настройка занимает минуты при наличии доступа и правильно настроенного DNS.
Важно: настройте автоматическое обновление и мониторинг, чтобы не столкнуться с истёкшими сертификатами в продакшене.
Image Credit: Robert Avgustin/ Shutterstock
Похожие материалы
Управление музыкой в Google Maps
update-alternatives в Ubuntu и Debian
Фишинг под ChatGPT: распознавание и план действий
Game Over в Arcade: экран и кнопки
Исправить ошибку: учётная запись Microsoft уже на устройстве