Продление и настройка SSL-сертификата сайта
Просроченный SSL — немедленный downtime: браузеры показывают ошибку безопасности и блокируют переход. Правильная настройка автообновления исключает эту проблему.
Let's Encrypt: автообновление
# Установка Certbot
sudo apt install certbot python3-certbot-nginx
# Получение сертификата
sudo certbot --nginx -d mysite.com -d www.mysite.com
# Проверка автообновления (Certbot устанавливает systemd timer)
sudo systemctl status certbot.timer
# Тест обновления (без реального обновления)
sudo certbot renew --dry-run
# Принудительное обновление
sudo certbot renew --force-renewal
Certbot обновляет сертификат автоматически за 30 дней до истечения.
Wildcard-сертификат Let's Encrypt
# Wildcard требует DNS-валидацию
sudo certbot certonly --manual --preferred-challenges=dns \
-d mysite.com -d "*.mysite.com"
# Автоматизация через DNS плагин (Cloudflare)
sudo apt install python3-certbot-dns-cloudflare
echo "dns_cloudflare_api_token = CF_TOKEN" > /etc/letsencrypt/cloudflare.ini
chmod 600 /etc/letsencrypt/cloudflare.ini
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
-d mysite.com -d "*.mysite.com" \
--preferred-challenges dns-01
Платный сертификат: ручное обновление
# 1. Создание CSR
openssl req -new -newkey rsa:2048 -nodes \
-keyout mysite.com.key \
-out mysite.com.csr \
-subj "/C=RU/ST=Moscow/L=Moscow/O=My Company/CN=mysite.com"
# 2. CSR отправляем в CA (Sectigo, DigiCert и т.д.)
# 3. Получаем .crt + цепочку
# 4. Устанавливаем в Nginx:
cat mysite.com.crt intermediate.crt > fullchain.crt
# nginx.conf
ssl_certificate /etc/ssl/mysite.com/fullchain.crt;
ssl_certificate_key /etc/ssl/mysite.com/mysite.com.key;
Мониторинг срока действия
# Ручная проверка
echo | openssl s_client -servername mysite.com -connect mysite.com:443 2>/dev/null \
| openssl x509 -noout -dates
# Скрипт для нескольких доменов
for domain in mysite.com api.mysite.com admin.mysite.com; do
expiry=$(echo | openssl s_client -servername "$domain" -connect "$domain:443" 2>/dev/null \
| openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
echo "$domain: $expiry"
done
HSTS и OCSP Stapling
# Включать HSTS только после проверки, что HTTPS работает корректно
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# OCSP Stapling (ускорение SSL-рукопожатия)
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/mysite.com/chain.pem;
resolver 8.8.8.8 1.1.1.1 valid=300s;
Проверка конфигурации
- SSL Labs: ssllabs.com/ssltest → должен быть A или A+
- Mozilla Observatory: observatory.mozilla.org
Настройка Let's Encrypt с автообновлением — 30–60 минут.







