Бесплатный HTTPS-сертификат на VPS через certbot
Установка certbot, получение сертификата Let’s Encrypt для домена и проверка автоматического продления.
Let’s Encrypt выдаёт TLS-сертификаты бесплатно, на 90 дней. certbot автоматизирует запрос и продление. Два условия: домен уже должен указывать на ваш VPS, а порты 80 и 443 должны быть доступны из Интернета.
- Let’s Encrypt выдаёт бесплатные сертификаты на 90 дней, которые certbot продлевает сам.
- Домен должен уже указывать на VPS, а порты 80 и 443 должны быть открыты.
- Сразу после установки проверьте продление командой с --dry-run.
Подготовить сервер
certbot нужно имя, которое резолвится в адрес VPS (см. статью о записях A), и веб-сервер, слушающий порт 80. На Debian или Ubuntu установите Nginx и certbot с плагином.
- sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx
- sudo ufw allow 'Nginx Full', если включён брандмауэр UFW (иначе пропустите эту строку).
- Проверьте, что сайт отвечает по HTTP, прежде чем продолжить: curl -I http://example.com.
Запросить сертификат
Одна команда настраивает Nginx и скачивает сертификат. Затем certbot предложит перенаправлять HTTP на HTTPS: соглашайтесь, если нет особой причины отказаться.
- sudo certbot --nginx -d example.com -d www.example.com
- Файлы лежат в /etc/letsencrypt/live/example.com/: fullchain.pem и privkey.pem.
- Проверьте конфигурацию и перезагрузите: sudo nginx -t && sudo systemctl reload nginx.
Проверить продление
Сертификат истекает через 90 дней. Пакеты Debian и Ubuntu ставят таймер systemd, который пытается продлить сертификат дважды в день. Достаточно убедиться, что он работает.
- systemctl list-timers | grep certbot: таймер должен показывать время следующего запуска.
- sudo certbot renew --dry-run: имитирует продление без изменения сертификатов.
- sudo certbot certificates: показывает дату окончания действия каждого сертификата.
Часто задаваемые вопросы
Почему запрос падает с ошибкой «Timeout during connect»?
Сервер Let’s Encrypt не достучался до порта 80: DNS ещё не указывает на VPS или брандмауэр блокирует соединение. Проверьте dig, затем sudo ufw status.
Нужен ли отдельный сертификат на каждый поддомен?
Нет. Один сертификат может покрывать несколько имён. Добавьте по одному -d на каждое дополнительное имя, например -d example.com -d www.example.com, и повторите команду.
Можно ли получить сертификат для сервиса, который не работает по HTTP?
Да, через проверку DNS, добавив временную TXT-запись. Способ зависит от DNS-провайдера: нужен соответствующий плагин certbot.