Полный гайд: Как бесплатно получить 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 ваш домен должен быть привязан к публичному IP-адресу сервера, а на сервере должны быть открыты порты 80 (HTTP) и/или 443 (HTTPS) для прохождения проверки.

Подготовка сервера и установка необходимых инструментов

Прежде всего, убедитесь, что у вас есть доступ к серверу с установленным Nginx и правами суперпользователя (root или через sudo). Процесс описан для систем на базе Debian/Ubuntu, но для CentOS/RHEL он будет аналогичным с заменой менеджера пакетов.

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

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

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

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

Убедитесь, что для вашего домена уже есть настроенный виртуальный хост (server block) в Nginx. В файле конфигурации (обычно в /etc/nginx/sites-available/ваш_сайт) должна быть корректно указана директива server_name с вашим доменным именем.

Получение и установка SSL-сертификата

Шаг 3: Запуск Certbot

Выполните команду, которая запустит интерактивный мастер:

sudo certbot --nginx

Certbot автоматически обнаружит домены из конфигурации Nginx, проведёт проверку владения доменом (через временный файл на веб-сервере) и выдаст сертификат. В процессе вас спросят:

  • Для каких доменов активировать HTTPS (обычно выбирайте все).
  • Сделать ли автоматический редирект с HTTP на HTTPS (настоятельно рекомендуется выбрать вариант 2 — «Redirect»).

Совет: Если у вас несколько доменов или субдоменов, вы можете получить один сертификат, покрывающий их все, используя флаг -d несколько раз: sudo certbot --nginx -d example.com -d www.example.com -d shop.example.com

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

После успешного выполнения откройте ваш сайт по адресу https://ваш_домен. В адресной строке браузера должен появиться значок замка. Конфигурационный файл Nginx будет автоматически обновлён: добавятся директивы для прослушивания порта 443, пути к сертификату и ключу.

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

Сертификаты Let's Encrypt действительны 90 дней. Certbot автоматически добавляет задание в cron или systemd timer для их обновления. Проверить статус автоматического обновления можно командой:

sudo systemctl status certbot.timer

Вы также можете вручную проверить возможность обновления и выполнить его тестовый запуск (без сохранения новых сертификатов):

sudo certbot renew --dry-run

Если тест проходит успешно, значит, автоматическое обновление настроено корректно.

Ручная настройка (продвинутый вариант)

В некоторых случаях (например, при использовании Docker или нестандартной конфигурации) может потребоваться получить сертификат без автоматического изменения конфигов Nginx. Используйте плагин certonly:

sudo certbot certonly --nginx

После этого вам нужно будет вручную добавить в конфигурацию Nginx в блоке server для порта 443 следующие директивы:

ssl_certificate /etc/letsencrypt/live/ваш_домен/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ваш_домен/privkey.pem;

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

  • Ошибка с портами: Убедитесь, что брандмауэр не блокирует порты 80 и 443. Для проверки можно использовать sudo netstat -tulpn | grep :80.
  • Слишком много запросов: Let's Encrypt имеет лимиты на выдачу сертификатов для одного домена в неделю. Если вы экспериментировали, дождитесь сброса лимита.
  • Проблемы с DNS: Убедитесь, что DNS-записи вашего домена (A-запись) указывают на правильный IP-адрес сервера. Изменения в DNS могут распространяться до 48 часов.

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

Это действительно бесплатно?

Да, сертификаты Let's Encrypt абсолютно бесплатны и не требуют продления за деньги. Платить не нужно ни сейчас, ни в будущем.

Подходит ли такой сертификат для коммерческого сайта?

Да, полностью. Он обеспечивает такое же шифрование, как и платные сертификаты. Единственное отличие — это Domain Validation (DV) уровень, который подтверждает только владение доменом. Для большинства сайтов этого более чем достаточно.

Что будет, если сертификат просрочится и не обновится?

Посетители увидят в браузере серьёзное предупреждение о безопасности, что подорвёт доверие и, скорее всего, приведёт к уходу с сайта. Поэтому так важна настройка автоматического обновления.

Можно ли получить сертификат для IP-адреса, а не домена?

Нет, Let's Encrypt выдаёт сертификаты только для доменных имён.

Работает ли с локальными (localhost) или внутренними доменами?

Нет, домен должен быть публично доступен в интернете для прохождения проверки Let's Encrypt. Для локального использования можно сгенерировать самоподписанный сертификат.