diff --git a/README.md b/README.md index be628334..32d26275 100755 --- a/README.md +++ b/README.md @@ -267,6 +267,60 @@ pytest tests/test_auth.py::test_create_user > HTML-отчёты coverage по каждому стеку открываются из сводного отчёта по ссылкам. +## 🔐 SSL/TLS конфигурация + +### Сертификаты для HTTPS (nginx) + +Для включения HTTPS поместите файлы сертификатов в директорию `./certs/`: + +**Вариант A — отдельные файлы (без пароля):** +``` +./certs/server.crt # SSL сертификат +./certs/server.key # Приватный ключ (незашифрованный) +``` + +**Вариант B — зашифрованный ключ + пароль:** +``` +./certs/server.crt # SSL сертификат +./certs/server.key # Приватный ключ (зашифрован, с DEK-Info) +SSL_KEY_PASSPHRASE=my-passphrase # переменная окружения для расшифровки +``` + +**Вариант C — PKCS#12 контейнер:** +``` +./certs/server.p12 # Контейнер с сертификатом + ключом +SSL_KEY_PASSPHRASE=my-passphrase # пароль от контейнера +``` + +Entrypoint автоматически: +1. Извлечёт `.crt` и `.key` из `.p12` (если нет отдельных файлов) +2. Расшифрует приватный ключ через `openssl rsa` (если есть `SSL_KEY_PASSPHRASE`) +3. Передаст расшифрованный ключ nginx (ключ остаётся в tmpfs контейнера) + +> **Безопасность:** Расшифрованный ключ хранится только в tmpfs `/etc/nginx/ssl/` внутри контейнера и не пишется на диск хоста. Пароль задаётся через переменную окружения, а не через файл на volume. + +### Корпоративные CA-сертификаты + +Положите `.crt`/`.pem` файлы в `./certs/` — entrypoint установит их в системное хранилище Alpine и NSS (Chromium/Playwright). Поддерживаются цепочки из нескольких CA (Root → Intermediate). + +### LLM CA-сертификаты + +Если LLM-провайдер использует корпоративный PKI — укажите URL для скачивания CA-сертификатов: +```bash +LLM_CA_CERT_URLS="http://pki.company.com/root-ca.crt http://pki.company.com/intermediate-ca.crt" +``` +Сертификаты скачиваются на старте backend-контейнера, конвертируются из DER в PEM при необходимости и устанавливаются в системное хранилище. Подробнее — в [ADR-0009](docs/adr/ADR-0009-ssl-certificate-management.md). + +### Диагностика + +```bash +# Проверка доверия сертификата +scripts/check_llm_certs.py + +# Принудительное отключение TLS verify (только для отладки) +LLM_SSL_VERIFY=false +``` + ## 🏢 Enterprise Clean Deployment Для разворота в корпоративной сети с очищенным дистрибутивом (без тестовых данных, с запретом внешних источников и обязательной compliance-проверкой) используется профиль **enterprise clean**.