Перейти к основному содержимому

SSL сертификаты

Использование собственных SSL сертификатов (основной способ)

Если у вас есть собственные SSL сертификаты, выполните следующие шаги:

Шаг 1: Подготовьте файлы сертификатов

Вам потребуются:

  • Файл сертификата (обычно .crt или .pem)
  • Файл приватного ключа (обычно .key)
  • (Опционально) Цепочка сертификатов (chain/intermediate certificates)

Шаг 2: Разместите сертификаты в нужной директории

  • Создайте директорию для вашего домена
mkdir -p ./certbot/conf/live/your-domain.com/
  • Скопируйте сертификат (если у вас есть chain, объедините их)

  • Формат fullchain.pem: ваш сертификат + промежуточные сертификаты

cat your-certificate.crt intermediate.crt > ./certbot/conf/live/your-domain.com/fullchain.pem
  • Если у вас уже есть полная цепочка
cp your-fullchain.pem ./certbot/conf/live/your-domain.com/fullchain.pem
  • Скопируйте приватный ключ
cp your-private.key ./certbot/conf/live/your-domain.com/privkey.pem
  • Установите права доступа
chmod 644 ./certbot/conf/live/your-domain.com/fullchain.pem
chmod 600 ./certbot/conf/live/your-domain.com/privkey.pem

Шаг 3: Создайте DH параметры (для повышенной безопасности)

openssl dhparam -out ./certbot/conf/ssl-dhparams.pem 2048

Этот процесс может занять несколько минут.

Шаг 4: Настройте Nginx

Отредактируйте файл ./nginx/nginx.conf:

  1. В секции HTTP сервера (порт 80) раскомментируйте редирект на HTTPS:

    server {
    listen 80;
    server_name your-domain.com; # Замените на ваш домен
    return 301 https://$server_name$request_uri;
    }
  2. Раскомментируйте блок HTTPS сервера (строки 112-177) и настройте:

    server {
    listen 443 ssl;
    server_name your-domain.com; # Замените на ваш домен

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_certificate /etc/nginx/ssl/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/live/your-domain.com/privkey.pem;
    ssl_dhparam /etc/nginx/ssl/ssl-dhparams.pem;

    # ...
    }

Шаг 5: Проверьте конфигурацию и перезапустите

  • Проверьте конфигурацию Nginx
docker compose exec nginx nginx -t
  • Если проверка успешна, перезапустите Nginx
docker compose restart nginx

Шаг 6: Обновите конфигурацию YouGile

  • Отредактируйте ./yougile/conf.json и укажите HTTPS URL:
{
"mainPageUrl": "https://your-domain.com"
}
  • Перезапустите YouGile:
docker compose restart yougile

Автоматическое получение сертификатов через Let's Encrypt (альтернативный способ)

Если у вас нет собственных сертификатов, вы можете получить бесплатные от Let's Encrypt:

Шаг 1: Убедитесь, что домен указывает на ваш сервер

Проверка DNS записи:

nslookup your-domain.com

Шаг 2: Получение сертификата

docker compose run --rm certbot certonly --webroot \
-w /var/www/certbot \
-d your-domain.com \
--email your-email@example.com \
--agree-tos \
--no-eff-email

Шаг 3: Настройте Nginx

Следуйте шагам 4-6 из раздела "Использование собственных SSL сертификатов" выше.

Шаг 4: Автоматическое обновление сертификатов

Let's Encrypt сертификаты действительны 90 дней. Настройте автообновление:

sudo crontab -e
  • Добавьте строку:
0 12 * * * cd /path/to/your/project && docker compose run --rm certbot renew --quiet && docker compose restart nginx

Проверка SSL

  • Проверка доступности через HTTPS
curl -I https://your-domain.com
  • Подробная информация о сертификате
openssl s_client -connect your-domain.com:443 -servername your-domain.com
  • Проверка срока действия сертификата
echo | openssl s_client -servername your-domain.com -connect your-domain.com:443 2>/dev/null | openssl x509 -noout -dates

Решение проблем с SSL

Ошибка "certificate verify failed":

  • Убедитесь, что в fullchain.pem включены промежуточные сертификаты
  • Проверьте правильность цепочки: openssl verify -CAfile intermediate.crt your-certificate.crt

Ошибка "permission denied":

  • Проверьте права доступа к файлам сертификатов
  • privkey.pem должен иметь права 600

Браузер показывает предупреждение о безопасности:

  • Проверьте, что домен в сертификате совпадает с доменом в адресной строке
  • Убедитесь, что сертификат не истек: openssl x509 -in fullchain.pem -noout -dates