fix: add NSS cert import for Chromium Playwright + libnss3-tools
- install_ca_to_nss() — imports corporate CA certs into Chromium's NSS database (~/.pki/nssdb), fixing ERR_CERT_AUTHORITY_INVALID in Playwright - libnss3-tools added to Dockerfile for certutil binary
This commit is contained in:
@@ -281,12 +281,87 @@ install_playwright() {
|
||||
}
|
||||
# #endregion docker.backend.entrypoint.install_playwright
|
||||
|
||||
# ======================================================================
|
||||
# install_ca_to_nss — импорт корпоративных CA в NSS базу Chromium
|
||||
# ======================================================================
|
||||
# #region docker.backend.entrypoint.install_ca_to_nss [C:3] [TYPE Function]
|
||||
# @BRIEF Импортирует PEM-сертификаты из /usr/local/share/ca-certificates/
|
||||
# в NSS Shared DB (~/.pki/nssdb), чтобы Chromium (Playwright) доверял
|
||||
# корпоративным CA (исправляет ERR_CERT_AUTHORITY_INVALID).
|
||||
# @PRE certutil (libnss3-tools) установлен. PEM-файлы есть в target_dirs.
|
||||
# @POST Сертификаты добавлены в NSS базу Chromium с trust-атрибутами "C,,".
|
||||
# @SIDE_EFFECT Создаёт ~/.pki/nssdb/ если не существовал.
|
||||
# @LAYER Infrastructure
|
||||
install_ca_to_nss() {
|
||||
if ! command -v certutil >/dev/null 2>&1; then
|
||||
echo "[entrypoint] certutil (libnss3-tools) не найден — пропускаем NSS импорт"
|
||||
return 0
|
||||
fi
|
||||
|
||||
local nss_db_dir="${HOME}/.pki/nssdb"
|
||||
local nss_db="${nss_db_dir}/sql"
|
||||
|
||||
# CA certs могут быть в llm/ или custom/
|
||||
local target_dirs=(
|
||||
"/usr/local/share/ca-certificates/llm"
|
||||
"/usr/local/share/ca-certificates/custom"
|
||||
)
|
||||
|
||||
# Собираем все PEM-файлы
|
||||
local certs=()
|
||||
for dir in "${target_dirs[@]}"; do
|
||||
if [ -d "$dir" ]; then
|
||||
for f in "$dir"/*.pem "$dir"/*.crt; do
|
||||
[ -f "$f" ] && certs+=("$f")
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${#certs[@]} -eq 0 ]; then
|
||||
echo "[entrypoint] Нет PEM-файлов для NSS импорта — пропускаем"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Создаём NSS DB если нет
|
||||
if [ ! -d "$nss_db_dir" ]; then
|
||||
mkdir -p "$nss_db_dir"
|
||||
echo "[entrypoint] Создание NSS DB: ${nss_db}"
|
||||
certutil -N -d "$nss_db" --empty-password 2>/dev/null || true
|
||||
fi
|
||||
|
||||
local imported=0
|
||||
for cert in "${certs[@]}"; do
|
||||
local nickname
|
||||
nickname="$(basename "$cert" | sed 's/\.[^.]*$//')"
|
||||
|
||||
# Проверяем, есть ли уже в NSS
|
||||
if certutil -L -d "$nss_db" -n "$nickname" >/dev/null 2>&1; then
|
||||
echo "[entrypoint] ✓ NSS: ${nickname} уже импортирован"
|
||||
continue
|
||||
fi
|
||||
|
||||
# Добавляем с trust-атрибутами "C,," (CA для TLS)
|
||||
if certutil -A -d "$nss_db" -n "$nickname" -t "C,," -i "$cert" -a 2>/dev/null; then
|
||||
echo "[entrypoint] ➕ NSS импортирован: ${nickname}"
|
||||
imported=$((imported + 1))
|
||||
else
|
||||
echo "[entrypoint] ⚠ NSS ошибка импорта: ${nickname}"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$imported" -gt 0 ]; then
|
||||
echo "[entrypoint] ✅ NSS: импортировано ${imported} сертификатов"
|
||||
fi
|
||||
}
|
||||
# #endregion docker.backend.entrypoint.install_ca_to_nss
|
||||
|
||||
# ======================================================================
|
||||
# MAIN
|
||||
# ======================================================================
|
||||
|
||||
install_certificates
|
||||
install_llm_ca_certs
|
||||
install_ca_to_nss
|
||||
install_playwright
|
||||
|
||||
# Check DB state: empty, legacy (tables exist but no alembic), or managed
|
||||
|
||||
Reference in New Issue
Block a user