Ответ
Получение и настройка SSL-сертификата — стандартная задача. Я предпочитаю автоматизировать этот процесс.
1. Автоматизированный способ (Let's Encrypt):
Для большинства проектов использую Certbot с плагином webroot или nginx. Это бесплатно и автоматически обновляется.
-
Установка Certbot (на Ubuntu):
sudo apt update sudo apt install certbot python3-certbot-nginx -
Получение сертификата (с автоматической настройкой Nginx):
sudo certbot --nginx -d example.com -d www.example.comCertbot автоматически изменит конфиг Nginx, добавив директивы
ssl_certificateиssl_certificate_key. -
Автообновление: Let's Encrypt выдает сертификаты на 90 дней. Certbot добавляет cron-задачу или systemd timer для автоматического обновления. Проверить можно вручную:
sudo certbot renew --dry-run
2. Ручной способ (например, для внутренних доменов или платных CA):
- Генерация приватного ключа и CSR (Certificate Signing Request):
openssl req -new -newkey rsa:2048 -nodes -keyout example.key -out example.csr - Отправляете
example.csrв Центр Сертификации (ЦС), проходите validation (по email, DNS или HTTP). - Получаете от ЦС цепочку сертификатов (обычно файлы
.crt).
3. Настройка в Nginx:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
# Рекомендуемые настройки безопасности
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
# Обязательный редирект с HTTP на HTTPS
# ...
}
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
4. Дополнительные практики:
- Использование HSTS (HTTP Strict Transport Security) заголовка.
- Регулярное сканирование конфигурации с помощью инструментов вроде SSL Labs Test.
- Для Kubernetes: использование cert-manager для автоматического получения и ротации сертификатов для Ingress-ресурсов.