Полный гид: Как бесплатно получить SSL-сертификат Let's Encrypt для Nginx и защитить свой сайт

Полный гид: Как бесплатно получить SSL-сертификат Let's Encrypt для Nginx и защитить свой сайт

В современном интернете HTTPS — это не роскошь, а обязательный стандарт безопасности и доверия. Если ваш сайт до сих пор работает по HTTP, вы не только рискуете данными пользователей, но и теряете позиции в поисковых системах. К счастью, сегодня любой владелец сайта может быстро, бесплатно и автоматически получить доверенный SSL-сертификат от Let's Encrypt. В этом подробном руководстве мы шаг за шагом разберем, как установить и настроить такой сертификат на веб-сервере Nginx.

Что такое Let's Encrypt и почему это лучший выбор?

Let's Encrypt — это некоммерческий центр сертификации, который предоставляет SSL/TLS-сертификаты абсолютно бесплатно. Его миссия — сделать интернет безопаснее, упростив процесс шифрования соединений. Сертификаты Let's Encrypt являются доверенными для всех основных браузеров и операционных систем, а срок их действия составляет 90 дней, что способствует лучшим практикам безопасности за счет автоматического обновления.

Важно: Let's Encrypt выдает только сертификаты типа Domain Validation (DV). Они подтверждают право владения доменом, но не проверяют юридическую информацию об организации. Для коммерческих и банковских проектов могут потребоваться платные сертификаты с расширенной проверкой (EV).

Предварительные требования

Прежде чем начать, убедитесь, что у вас есть:

  • Сервер с установленной ОС Linux (Ubuntu 20.04/22.04, Debian, CentOS).
  • Установленный и работающий веб-сервер Nginx.
  • Доменное имя (например, example.com), которое уже направлено (DNS A-запись) на IP-адрес вашего сервера.
  • Доступ к серверу с правами суперпользователя (root или через sudo).
  • Открытые порты 80 (HTTP) и 443 (HTTPS) в файрволе.

Шаг 1: Установка клиента Certbot

Certbot — это официальный клиент для автоматического получения и обновления сертификатов Let's Encrypt. Установка зависит от вашего дистрибутива Linux.

Для Ubuntu/Debian:

  1. Обновите список пакетов: sudo apt update
  2. Установите Certbot и плагин для Nginx: sudo apt install certbot python3-certbot-nginx

Для CentOS/RHEL:

  1. Включите EPEL-репозиторий: sudo yum install epel-release
  2. Установите Certbot: sudo yum install certbot python3-certbot-nginx

Шаг 2: Получение SSL-сертификата

Самый простой способ — использовать плагин Certbot для Nginx, который автоматически изменит конфигурацию вашего сайта.

  1. Выполните команду: sudo certbot --nginx -d example.com -d www.example.com
  2. Certbot запросит ваш email для уведомлений о проблемах с обновлением (рекомендуется указать реальный).
  3. Примите условия соглашения (Terms of Service).
  4. Выберите, хотите ли вы перенаправлять весь HTTP-трафик на HTTPS (настоятельно рекомендуется выбрать вариант 2 — редирект).

Если все прошло успешно, вы увидите сообщение о выдаче сертификата. Certbot автоматически создаст конфигурацию для вашего домена в Nginx, добавив блоки для работы на порту 443 с SSL.

Совет: Если у вас несколько доменов или поддоменов, перечислите их все через параметр -d. Например: -d site.ru -d www.site.ru -d shop.site.ru. Это создаст один сертификат, покрывающий все перечисленные имена.

Шаг 3: Проверка конфигурации Nginx

Certbot вносит изменения в конфигурационный файл вашего сайта (обычно /etc/nginx/sites-available/your_site). Давайте проверим ключевые моменты:

  • Должен появиться новый блок server для порта 443.
  • Внутри него должны быть директивы ssl_certificate и ssl_certificate_key, указывающие на файлы сертификата и приватного ключа (обычно в /etc/letsencrypt/live/your_domain/).
  • В блоке для порта 80 должен быть настроен редирект на HTTPS (если вы выбрали этот вариант).

После проверки обязательно перезагрузите Nginx: sudo systemctl reload nginx

Шаг 4: Автоматическое обновление сертификатов

Сертификаты Let's Encrypt действительны 90 дней. Certbot может автоматически обновлять их. Проверить статус можно командой: sudo certbot renew --dry-run

Эта команда симулирует процесс обновления, не внося реальных изменений. Если тест прошел успешно, значит, автоматическое обновление настроено корректно. Certbot создает системный таймер (systemd timer) или cron-задачу, которая дважды в день проверяет срок действия сертификатов и обновляет те, которым осталось меньше 30 дней.

Шаг 5: Проверка работы HTTPS

Откройте ваш сайт в браузере по адресу https://ваш_домен. В адресной строке должен появиться значок замка. Для глубокой проверки используйте онлайн-сервисы вроде SSL Labs SSL Test. Он оценит вашу конфигурацию по безопасности и выдаст подробный отчет.

Решение частых проблем

Ошибка "Failed to connect to host for DVSNI challenge"

Чаще всего означает, что порт 80 на вашем сервере закрыт или заблокирован файрволом. Убедитесь, что Nginx слушает порт 80 и он доступен извне.

Ошибка "Too many registrations for this IP"

Let's Encrypt имеет лимиты на количество запросов сертификатов с одного IP. Для тестовых целей используйте staging-окружение: --staging флаг в команде certbot.

Сертификат не обновляется автоматически

Проверьте логи: sudo journalctl -u certbot.timer и sudo journalctl -u certbot.service. Убедитесь, что задача в cron или systemd timer активна.

FAQ: Часто задаваемые вопросы

Сертификат Let's Encrypt действительно бесплатный?

Да, абсолютно. Вы платите только за домен и хостинг. Выдача и обновление сертификатов не требуют оплаты.

Можно ли использовать один сертификат для нескольких доменов?

Да, с помощью SAN (Subject Alternative Name) сертификата. Просто перечислите все домены в одной команде certbot через параметры -d.

Что делать, если я хочу вручную настроить конфиг Nginx?

Используйте плагин certonly: sudo certbot certonly --webroot -w /var/www/html -d example.com. Это только получит сертификаты, не трогая конфигурацию Nginx. Затем вам нужно будет самостоятельно добавить SSL-директивы в конфиг.

Безопасно ли доверять Let's Encrypt?

Да. Let's Encrypt поддерживается крупнейшими IT-компаниями (Mozilla, Cisco, Google и др.) и является частью Linux Foundation. Его сертификаты признаются всеми основными браузерами и операционными системами.

Как отозвать сертификат, если он скомпрометирован?

Используйте команду: sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem. После отзыва нужно удалить сертификат и получить новый.