Гид по технологиям

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

5 min read Безопасность Обновлено 02 Jan 2026
Бесплатный SSL с Let's Encrypt и certbot
Бесплатный 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 дней, поэтому рекомендуется настроить автоматическое продление.

Быстрый план действий (микро-методология)

  1. Подключиться к серверу по SSH.
  2. Проверить/установить certbot.
  3. Остановить HTTP-сервер (временно) при необходимости для проверки.
  4. Получить сертификат: certbot certonly.
  5. Включить HTTPS в конфиге Nginx/Apache и указать пути к сертификатам.
  6. Перезапустить веб-сервер и проверить работу.
  7. Настроить автоматическое обновление (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 certonly

certbot предложит методы подтверждения прав на домен. Выберите 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
  1. Чтобы автоматически перенаправлять HTTP на HTTPS, в серверном блоке для порта 80 добавьте:
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}
  1. Конфигурация для 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

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Управление музыкой в Google Maps
Навигация

Управление музыкой в Google Maps

update-alternatives в Ubuntu и Debian
Linux

update-alternatives в Ubuntu и Debian

Фишинг под ChatGPT: распознавание и план действий
Безопасность

Фишинг под ChatGPT: распознавание и план действий

Game Over в Arcade: экран и кнопки
GameDev

Game Over в Arcade: экран и кнопки

Исправить ошибку: учётная запись Microsoft уже на устройстве
Windows

Исправить ошибку: учётная запись Microsoft уже на устройстве

Сброс положения сенсорной клавиатуры в Windows 11
Windows

Сброс положения сенсорной клавиатуры в Windows 11