Skip to content

Пример установки бесплатного сертификата от Let's Encrypt с автоматическим продлением используя certbot.

Подготовка

Открыть в фаерволле порты http (80) и https (443):

bash
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Устанавливаем certbot:

bash
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
certbot --version

Проверим, что домен указывает на IP VPS. Результат должен показать IP вашего сервера:

bash
dig +short <example.com>

Раскоментируем в файле конфигурации Nginx в секции http строку:

nginx
http {
    #...
    server_names_hash_bucket_size: 64;
    #...
}

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

Выполним следующую команду:

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

Wildcard-сертификат

Wildcard-сертификат покрывает все поддомены (*.example.com). Для его получения используется DNS-challenge вместо HTTP:

bash
sudo certbot certonly --manual --preferred-challenges=dns -d example.com -d *.example.com

Certbot попросит создать TXT-запись в DNS:

txt
# Certbot покажет:
# Please deploy a DNS TXT record under the name:
# _acme-challenge.example.com
# with the following value:
# gfj9Xq...Rg5nTzKFw

# Добавьте TXT-запись через панель регистратора
# Подождите 1-2 минуты для распространения DNS
# Нажмите Enter в Certbot

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

Тестовый запуск (без реального продления):

bash
sudo certbot renew --dry-run

Проверка таймера systemd:

bash
sudo systemctl status certbot.timer
sudo systemctl list-timers | grep certbot

Оптимизация SSL: TLS 1.3, HSTS, OCSP Stapling

Базовая установка SSL достаточна для безопасности, но дополнительная оптимизация ускоряет загрузку и повышает оценку в SSL Labs. TLS 1.3 — обязательно!

В файле /etc/nginx/nginx.conf изменить следующие строки:

nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;

HSTS — принудительный HTTPS. HSTS сообщает браузеру: всегда подключаться только через HTTPS. max-age=63072000 = 2 года.

В блоке server (listen 443) добавим:

nginx
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

OCSP Stapling — ускорение проверки сертификата.

nginx
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 1.1.1.1 valid=300s;
resolver_timeout 5s;

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

bash
sudo nginx -t
sudo systemctl reload nginx

Проверить SSL оценку можно на ssllabs.com. Цель: оценка A+ (TLS 1.3 + HSTS)

Создано с VitePress