Бесплатный SSL Let's Encrypt через certbot: установка и автопродление
Запустить на сервере одной командой (сначала проверьте содержимое скрипта ниже):
curl -sSL https://cp.lv/scripts/besplatnyj-ssl-lets-encrypt.sh | sudo bash…или через wget:
wget -qO- https://cp.lv/scripts/besplatnyj-ssl-lets-encrypt.sh | sudo bashСодержимое скрипта besplatnyj-ssl-lets-encrypt.sh:
#!/usr/bin/env bash
# Выпуск бесплатного сертификата Let's Encrypt для Nginx
set -e
export DEBIAN_FRONTEND=noninteractive
DOMAIN=example.com
[email protected]
# 1. Открыть порты 80 и 443
sudo ufw allow 'Nginx Full' || true
# 2. Установить certbot с плагином Nginx
sudo apt-get update
sudo apt-get install -y certbot python3-certbot-nginx
# 3. Выпустить сертификат и настроить HTTPS-редирект (неинтерактивно)
sudo certbot --nginx -d ${DOMAIN} -d www.${DOMAIN} \
--non-interactive --agree-tos -m ${EMAIL} --redirect
# 4. Проверить конфиг Nginx и автопродление
sudo nginx -t && sudo systemctl reload nginx
sudo certbot renew --dry-run
echo "Готово: HTTPS для ${DOMAIN} включён, автопродление настроено."
Let’s Encrypt — это некоммерческий центр сертификации, который выдаёт TLS-сертификаты бесплатно: сам сертификат ничего не стоит, а выпускается и продлевается автоматически утилитой certbot. Ниже — как включить HTTPS для сайта на Nginx за несколько минут.
Что нужно заранее
- Домен, A-запись которого указывает на IP вашего сервера.
- Работающий server block Nginx с корректным
server_name. - Открытые порты 80 и 443:
sudo ufw allow 'Nginx Full'
Порт 80 обязателен — по нему Let’s Encrypt проверяет владение доменом (HTTP-01 challenge).
Если server block ещё не создан, откройте конфиг в редакторе (nano, vim или mcedit):
sudo nano /etc/nginx/sites-available/example.com
Минимальный HTTP-конфиг под проверку домена (потом certbot допишет сюда HTTPS):
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
}
Либо создайте конфиг целиком одной командой — скопируйте и вставьте в консоль (кавычки 'EOF' важны, чтобы Nginx не трогал $-переменные):
sudo tee /etc/nginx/sites-available/example.com > /dev/null << 'EOF'
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
}
EOF
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Шаг 1. Установка certbot
Рекомендуемый способ — через snap, он всегда содержит свежую версию:
sudo snap install core && sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Альтернатива через apt (если snap недоступен):
sudo apt install certbot python3-certbot-nginx -y
Шаг 2. Выпуск сертификата
Плагин Nginx сам найдёт нужный server block, выпустит сертификат и пропишет настройки HTTPS:
sudo certbot --nginx -d example.com -d www.example.com
Certbot спросит email (для уведомлений об истечении) и согласие с условиями. На вопрос про редирект выберите вариант с перенаправлением HTTP → HTTPS. После успешного выпуска сертификат сохранится в /etc/letsencrypt/live/example.com/.
Шаг 3. Что certbot добавляет в конфиг
После выпуска в server block появятся строки:
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
И отдельный блок редиректа с 80 порта на HTTPS. Проверьте и перезагрузите:
sudo nginx -t
sudo systemctl reload nginx
Шаг 4. Проверка автопродления
Сертификаты Let’s Encrypt действуют 90 дней. Certbot устанавливает systemd-таймер, который продлевает их автоматически. Проверьте таймер и прогоните тестовое продление:
systemctl list-timers | grep certbot
sudo certbot renew --dry-run
Если --dry-run завершился без ошибок — реальное продление тоже пройдёт. Ничего вручную делать не нужно.
Шаг 5. Проверка HTTPS
Откройте https://example.com — в адресной строке появится замок. Проверить цепочку и срок можно из консоли:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
Полезные команды certbot
| Задача | Команда |
|---|---|
| Список сертификатов | sudo certbot certificates |
| Продлить сейчас | sudo certbot renew |
| Отозвать сертификат | sudo certbot revoke --cert-name example.com |
| Добавить домен | sudo certbot --nginx -d example.com -d shop.example.com |
Частые вопросы
Правда ли сертификат Let’s Encrypt бесплатный? Да, центр сертификации Let’s Encrypt выдаёт и продлевает сертификаты без оплаты — это его модель. Оплачивается только сам сервер, на котором работает сайт.
Что делать, если certbot пишет «challenge failed»?
Чаще всего A-запись домена ещё не указывает на сервер или закрыт порт 80. Проверьте DNS (dig example.com) и правила брандмауэра.
Сертификат на 90 дней — придётся продлевать руками?
Нет. Certbot ставит таймер автопродления. Проверьте его командой certbot renew --dry-run — этого достаточно.
Можно ли выпустить wildcard-сертификат (*.example.com)? Да, но потребуется DNS-01 challenge и плагин под вашего DNS-провайдера, так как HTTP-проверка для поддоменов не годится.
HTTPS сегодня обязателен для любого сайта: он влияет и на доверие пользователей, и на ранжирование. Развернуть сайт с сертификатом можно на тарифах со страницы аренда VPS, а для магазинов и CMS — VPS для WordPress.
