Как установить бесплатный SSL от Let’s Encrypt на Apache и Nginx

HTTPS для сайта на VPS – базовая гигиена: шифрование трафика, доверие посетителей и нормальная работа современных браузеров. Ниже – как бесплатно выпустить сертификат Let’s Encrypt через Certbot на Ubuntu с Apache или Nginx, включить редирект с HTTP и проверить автопродление.

Зачем SSL (TLS) сертификат

Сертификат подтверждает, что браузер общается с вашим сервером, и включает шифрование. На практике это даёт:

  • шифрование между клиентом и сервером;
  • замок в адресной строке и отсутствие предупреждений о «небезопасном соединении»;
  • обязательное требование для многих API, форм логина и платёжных сценариев;
  • плюс к SEO: поисковики давно отдают предпочтение HTTPS.

Формально сегодня говорят TLS, но в быту по-прежнему чаще «SSL-сертификат».

Что такое Let’s Encrypt

Let’s Encrypt – некоммерческий удостоверяющий центр. Сертификаты бесплатные, срок – 90 дней, выпуск и продление идут по протоколу ACME. На сервере обычно ставят клиент Certbot: он запрашивает сертификат, правит конфиг веб-сервера и ставит таймер на renew.

Что нужно заранее

  • домен (и при желании www), A/AAAA-записи которого указывают на IP вашего VPS;
  • SSH-доступ с sudo/root;
  • работающий Apache или Nginx, который отвечает на 80-м порту с этого домена;
  • открытые порты 80 и 443 в фаерволе.

Пока DNS не смотрит на сервер, HTTP-01 challenge от Let’s Encrypt не пройдёт.


Apache на Ubuntu

1. Установка Certbot

Обновляем индексы пакетов и ставим Certbot с плагином для Apache:

sudo apt update
sudo apt install certbot python3-certbot-apache

2. Выпуск сертификата

sudo certbot --apache

Certbot спросит email, согласие с условиями и домен(ы). Дальше он сам поправит virtual host и предложит редирект HTTP → HTTPS. Обычно выбирают редирект (Yes), чтобы весь трафик шёл по защищённому каналу.

Если доменов несколько, можно явно указать:

sudo certbot --apache -d example.com -d www.example.com

3. Проверка

Откройте в браузере https://ваш-домен. Должен быть валидный сертификат без предупреждений. При ошибках смотрите лог:

sudo tail -n 100 /var/log/letsencrypt/letsencrypt.log

Дополнительно удобно прогнать домен через SSL Labs (ssllabs.com/ssltest) – там видно протоколы, цепочку и слабые места конфига.


Nginx на Ubuntu

1. Установка Certbot

sudo apt update
sudo apt install certbot python3-certbot-nginx

2. Выпуск сертификата

Перед запуском конфиг Nginx должен успешно парситься (nginx -t), а server_name – совпадать с доменом:

sudo certbot --nginx

Или с явными именами:

sudo certbot --nginx -d example.com -d www.example.com

Плагин внесёт ssl_certificate / ssl_certificate_key и при согласии добавит редирект на HTTPS.

3. Проверка

Снова откройте https://ваш-домен. Если что-то пошло не так:

sudo tail -n 100 /var/log/letsencrypt/letsencrypt.log
sudo nginx -t
sudo systemctl status nginx

Автопродление

Сертификаты Let’s Encrypt живут 90 дней. Certbot обычно ставит systemd timer или cron, который запускает renew заранее. Проверка «вхолостую»:

sudo certbot renew --dry-run

Успешный dry-run означает, что продление отрабатывает без сюрпризов. Реальный renew Certbot делает сам; вручную достаточно только если ломаете конфиг или меняете DNS.


Усиление TLS для Nginx

После базового выпуска можно ужесточить протоколы и кэш сессий в server-блоке (пути к сертификатам Certbot уже пропишет сам):

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384";
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_dhparam /etc/ssl/certs/dhparam.pem;

Файл DH-параметров (генерация может занять время):

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
sudo nginx -t && sudo systemctl reload nginx

Для продакшена чаще берут актуальные рекомендации Mozilla SSL Configuration Generator под вашу версию Nginx, а не копируют набор cipher раз и навсегда.

Типичные проблемы

  • Challenge failed – DNS не на тот IP, закрыт порт 80, или другой сервис перехватывает HTTP.
  • Wrong server_name – в конфиге Nginx/Apache указан другой хост, Certbot не знает, куда вписать SSL.
  • Rate limit Let’s Encrypt – слишком много неудачных попыток; подождите или используйте staging / dry-run.
  • Сайт за Cloudflare/прокси – режим SSL на стороне CDN должен быть согласован (Full / Full strict), иначе возможны циклы редиректов.

Краткий чеклист

  1. DNS A-запись на VPS, порты 80/443 открыты.
  2. apt install certbot python3-certbot-apache или python3-certbot-nginx.
  3. certbot --apache или certbot --nginx, включить HTTPS-редирект.
  4. Проверить сайт по https и certbot renew --dry-run.
  5. По желанию – ужесточить TLS и прогнать SSL Labs.

После этого сертификат живёт своей жизнью: Certbot обновляет его, веб-сервер подхватывает новые файлы. Остаётся не ломать server_name и не закрывать 80-й порт, если используете HTTP-01.

Источники и ссылки


Комментарии загружаются…