Пример установки бесплатного сертификата от Let's Encrypt с автоматическим продлением используя certbot.
Подготовка
Открыть в фаерволле порты http (80) и https (443):
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpУстанавливаем certbot:
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
certbot --versionПроверим, что домен указывает на IP VPS. Результат должен показать IP вашего сервера:
dig +short <example.com>Раскоментируем в файле конфигурации Nginx в секции http строку:
http {
#...
server_names_hash_bucket_size: 64;
#...
}Получение и установка сертификата
Выполним следующую команду:
sudo certbot --nginx -d example.com -d www.example.comWildcard-сертификат
Wildcard-сертификат покрывает все поддомены (*.example.com). Для его получения используется DNS-challenge вместо HTTP:
sudo certbot certonly --manual --preferred-challenges=dns -d example.com -d *.example.comCertbot попросит создать TXT-запись в DNS:
# 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Автоматическое продление сертификата
Тестовый запуск (без реального продления):
sudo certbot renew --dry-runПроверка таймера systemd:
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 изменить следующие строки:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;HSTS — принудительный HTTPS. HSTS сообщает браузеру: всегда подключаться только через HTTPS. max-age=63072000 = 2 года.
В блоке server (listen 443) добавим:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;OCSP Stapling — ускорение проверки сертификата.
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 1.1.1.1 valid=300s;
resolver_timeout 5s;Проверка конфигурации Nginx
sudo nginx -t
sudo systemctl reload nginxПроверить SSL оценку можно на ssllabs.com. Цель: оценка A+ (TLS 1.3 + HSTS)