fix: QA findings — Dockerfile #endregion dedup, @RATIONALE, grep -qF
- Removed duplicate #endregion in backend.Dockerfile (P6 critical) - Added @RATIONALE and @REJECTED to install_ca_to_nss and install_llm_ca_certs - Changed grep -q to grep -qF in install_llm_ca_certs validation
This commit is contained in:
@@ -5,7 +5,6 @@
|
||||
# @RELATION DEPENDS_ON -> [EXT:path:backend/requirements.txt]
|
||||
# @PRE Docker builder context — корень проекта. backend/ и docker/ доступны.
|
||||
# @POST Образ с backend API, Playwright, entrypoint для bootstrap admin и установки сертификатов.
|
||||
# #endregion docker.backend.Dockerfile
|
||||
|
||||
FROM python:3.11-slim
|
||||
|
||||
|
||||
@@ -82,6 +82,16 @@ install_certificates() {
|
||||
# @BRIEF Скачивает PEM/DER-сертификаты из LLM_CA_CERT_URLS, конвертирует DER→PEM,
|
||||
# устанавливает в системное хранилище, создаёт хеш-симлинки и при необходимости
|
||||
# добавляет в ca-certificates.crt напрямую (fallback для OpenSSL 3-совместимости).
|
||||
# @RATIONALE DER→PEM конвертация необходима, т.к. update-ca-certificates ожидает
|
||||
# PEM-формат (-----BEGIN CERTIFICATE-----). Корпоративные PKI часто отдают
|
||||
# сертификаты в DER (бинарном) формате через HTTP.
|
||||
# @RATIONALE Хеш-симлинки (hash.0) создаются вручную, т.к. update-ca-certificates
|
||||
# в Debian Bookworm (python:3.11-slim) иногда пропускает создание ссылок для
|
||||
# сертификатов из поддиректорий. Fallback cat в ca-certificates.crt гарантирует
|
||||
# что OpenSSL 3.x увидит сертификаты даже если update-ca-certificates их пропустит.
|
||||
# @REJECTED Вариант "только контейнерный volume с .crt файлами" отвергнут —
|
||||
# требует ручного копирования сертификатов на хост перед запуском.
|
||||
# URL-based подход позволяет централизованно управлять сертификатами через PKI.
|
||||
# @PRE LLM_CA_CERT_URLS — строка с URL через пробел; curl и openssl установлены.
|
||||
# @POST Сертификаты доступны в /etc/ssl/certs/ca-certificates.crt.
|
||||
# Хеш-симлинки созданы для каждого сертификата.
|
||||
@@ -180,7 +190,7 @@ install_llm_ca_certs() {
|
||||
cert_subject="$(openssl x509 -in "$pem" -noout -subject 2>/dev/null | head -1 || echo "unknown")"
|
||||
|
||||
# Проверяем есть ли в ca-certificates.crt
|
||||
if grep -q "$cert_name" /etc/ssl/certs/ca-certificates.crt 2>/dev/null || \
|
||||
if grep -qF "$cert_name" /etc/ssl/certs/ca-certificates.crt 2>/dev/null || \
|
||||
grep -qF "$(openssl x509 -in "$pem" -noout -serial 2>/dev/null)" /etc/ssl/certs/ca-certificates.crt 2>/dev/null; then
|
||||
echo "[entrypoint] ✅ ${cert_name} — в ca-certificates.crt (${cert_subject})"
|
||||
else
|
||||
@@ -288,6 +298,16 @@ install_playwright() {
|
||||
# @BRIEF Импортирует PEM-сертификаты из /usr/local/share/ca-certificates/
|
||||
# в NSS Shared DB (~/.pki/nssdb), чтобы Chromium (Playwright) доверял
|
||||
# корпоративным CA (исправляет ERR_CERT_AUTHORITY_INVALID).
|
||||
# @RATIONALE Playwright's Chromium использует NSS Shared DB (~/.pki/nssdb)
|
||||
# для CA trust, отдельно от системного OpenSSL bundle. update-ca-certificates
|
||||
# добавляет сертификаты в /etc/ssl/certs/, но Chromium их не видит.
|
||||
# certutil -A -t "C,," импортирует PEM как доверенный CA для TLS.
|
||||
# @RATIONALE NSS импорт выполняется после install_llm_ca_certs (скачивает .pem)
|
||||
# и update-ca-certificates (устанавливает в систему), но перед
|
||||
# install_playwright (который может запустить Chromium). Этот порядок
|
||||
# гарантирует, что PEM-файлы уже есть на диске до создания NSS DB.
|
||||
# @REJECTED Использование Playwright --ignore-certificate-errors отвергнуто —
|
||||
# отключает ВСЕ SSL проверки глобально, а не только для корп. CA.
|
||||
# @PRE certutil (libnss3-tools) установлен. PEM-файлы есть в target_dirs.
|
||||
# @POST Сертификаты добавлены в NSS базу Chromium с trust-атрибутами "C,,".
|
||||
# @SIDE_EFFECT Создаёт ~/.pki/nssdb/ если не существовал.
|
||||
|
||||
Reference in New Issue
Block a user