Skip to content
← Все статьи

Бесплатный SSL через Let's Encrypt: установка certbot за 10 минут

Бесплатный SSL через Let's Encrypt: установка certbot за 10 минут

Let's Encrypt — некоммерческий центр сертификации, выдающий бесплатные проверку SSL с автоматическим обновлением. С 2016 года они стали де-факто стандартом для малого и среднего бизнеса: настройка занимает 10 минут, обновление происходит само, а сертификат доверяют все современные браузеры. В статье — полный гайд по установке certbot на Ubuntu/Debian и CentOS, с примерами для nginx и Apache.

Что такое Let's Encrypt и ACME-протокол

Let's Encrypt использует протокол ACME (Automatic Certificate Management Environment) — стандартизированный API документацию для выдачи сертификатов. Клиент на вашем сервере доказывает, что владеет доменом (через HTTP-01, DNS-01 или TLS-ALPN-01 challenge), и получает сертификат на 90 дней. Certbot — официальный ACME-клиент, но есть и альтернативы: acme.sh, lego, caddy (встроенный).

Лимиты Let's Encrypt:

Установка certbot

Ubuntu/Debian:

sudo apt update
sudo apt install certbot python3-certbot-nginx
# или для Apache:
sudo apt install certbot python3-certbot-apache

CentOS/RHEL/AlmaLinux:

sudo dnf install certbot python3-certbot-nginx

Универсальный способ — через snap (рекомендуется на новых системах):

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Проверка: certbot --version должен показать 2.0+.

Выпуск сертификата для nginx (автоматический режим)

Самый простой способ — плагин nginx, который сам модифицирует конфиг:

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

Certbot попросит email (для уведомлений о продлении), согласие с ToS и выдаст сертификат. Файлы будут в /etc/letsencrypt/live/example.com/. В ваш nginx-конфиг добавятся строки:

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;

Проверка: sudo nginx -t && sudo systemctl reload nginx. Откройте https://example.com — должен быть зелёный замок.

Ручной режим через webroot

Если вы не хотите, чтобы certbot трогал nginx-конфиг (например, используете свой шаблон или Ansible), возьмите только сертификат:

sudo certbot certonly --webroot -w /var/www/html \
    -d example.com -d www.example.com

Нужно, чтобы nginx обслуживал /.well-known/acme-challenge/ из /var/www/html:

location /.well-known/acme-challenge/ {
    root /var/www/html;
}

Потом вручную пропишите пути в вашем SSL-конфиге и перезагрузите nginx.

Standalone-режим (без веб-сервера)

Если веб-сервер ещё не настроен или нужно выпустить под нестандартный проверку портов:

sudo systemctl stop nginx
sudo certbot certonly --standalone -d example.com
sudo systemctl start nginx

Certbot временно поднимет свой сервер на порту 80. Нужно, чтобы порт был свободен — останавливайте nginx/apache.

DNS-01 для wildcard

Wildcard-сертификаты выдаются только через DNS-01. Пример с Cloudflare:

# Установить плагин
sudo snap install certbot-dns-cloudflare

# Создать файл с API-токеном
sudo tee /etc/letsencrypt/cloudflare.ini <<EOF
dns_cloudflare_api_token = YOUR_TOKEN
EOF
sudo chmod 600 /etc/letsencrypt/cloudflare.ini

# Выпустить wildcard
sudo certbot certonly \
    --dns-cloudflare \
    --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
    -d "*.example.com" -d example.com

Аналогичные плагины есть для Route 53, DigitalOcean, Google Cloud DNS. Подробнее о разнице — wildcard vs SAN.

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

Certbot создаёт systemd-таймер, который запускает certbot renew два раза в сутки. Проверить:

sudo systemctl status certbot.timer
# либо cron-задачу:
cat /etc/cron.d/certbot

Ручная симуляция обновления (без изменений):

sudo certbot renew --dry-run

Реальное обновление сертификат не трогает, если до истечения больше 30 дней. Добавьте хук для перезагрузки nginx:

# /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
#!/bin/bash
systemctl reload nginx
chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

Типичные ошибки и решения

Мониторинг и алерты

Certbot автоматизирует обновление, но крон может сломаться (диск, DNS). Подключите внешний мониторинг сайтов: Enterno.io Monitors проверяет срок действия каждые 5 минут и шлёт алерт за 14/7/3 дня до истечения в Telegram, Email или Slack. Это гарантия, что забытое обновление не приведёт к NET::ERR_CERT_DATE_INVALID.

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

Let's Encrypt подходит для коммерческих сайтов?

Да. Let's Encrypt используют Cloudflare, WordPress.com, Mozilla, Netflix и миллионы сайтов. Единственное ограничение — нет EV-сертификатов с зелёной плашкой названия компании.

Почему 90 дней, а не год?

Короткий срок уменьшает риск компрометации: украденный ключ будет полезен максимум 3 месяца. Плюс это заставляет автоматизировать процесс.

Как выпустить сертификат за NAT или без публичного IP?

Используйте DNS-01 challenge — он не требует доступа по HTTP. Сервер вообще не обязан быть публичным.

Можно ли использовать Let's Encrypt на Windows Server?

Да, есть альтернативный клиент win-acme — полноценный ACME-клиент для IIS.

Заключение

Let's Encrypt + certbot — самый быстрый способ получить валидный SSL: 10 минут, бесплатно, с автообновлением. После установки проверьте конфигурацию через SSL Checker enterno.io и настройте Monitors на slack/telegram алерты о сроке действия. Следующий шаг — включить HSTS и ужесточить cipher suites.

ACME протокол — RFC 8555. Документация certbot — certbot.eff.org. Let's Encrypt docs — letsencrypt.org/docs.

Проверьте ваш сайт прямо сейчас

Проверить →
Другие статьи: SSL
SSL
Слабые cipher suites: как найти и отключить небезопасные шифры TLS
15.04.2026 · 6 просм.
SSL
Mixed Content: как найти и исправить HTTP-ресурсы на HTTPS-сайте
15.04.2026 · 7 просм.
SSL
TLS 1.3 vs TLS 1.2: что изменилось и как правильно мигрировать
15.04.2026 · 9 просм.
SSL
Неполная цепочка SSL-сертификата: как найти и исправить incomplete chain
15.04.2026 · 7 просм.