Статья
Десктоп приложение: curl ок, Electron нет
Десктоп на Chromium ругается, браузер и curl доверяют сертификату — root CA не попал в ~/.pki/nssdb.
В десктоп-клиенте (Electron) при подключении к серверу увидел — Недействительный хост. Домен пингуется, веб-интерфейс в браузере открывается, curl пишет SSL certificate verify ok. Оказалось: системному CA приложение не обязано верить — у Chromium/Electron своё NSS-хранилище.
Что произошло
Картина:
- сервер с сертификатом от локального/корпоративного CA (
mkcertили внутренний root); - браузер и
curlдоверяют; - Electron-приложение показывает общую ошибку — Недействительный хост.
curl обычно ходит через системный bundle:
/etc/ssl/certs/ca-certificates.crt
Electron/Chromium на Linux часто смотрит пользовательское NSS:
~/.pki/nssdb
Если root CA лежит только в системе, а в nssdb его нет — TLS-запрос из приложения падает.
Как искал
Проверил, что с точки зрения системы TLS живой:
curl -v https://app.example.com/api
Нужный сигнал:
SSL certificate verify ok.
Раз curl ок, а десктоп нет — смотрел доверие CA именно для пользователя, от которого запускается приложение.
Решение
Команды — под тем же пользователем, что запускает десктоп, не под root.
1. Утилиты NSS
sudo apt install libnss3-tools
2. NSS DB (если нет или проще пересоздать)
rm -rf "$HOME/.pki/nssdb"
mkdir -p "$HOME/.pki/nssdb"
certutil -d sql:"$HOME/.pki/nssdb" -N --empty-password
Если хранилище уже было с паролем, certutil -N может спросить старый. Когда своих клиентских сертификатов там нет — проще удалить каталог и создать заново.
3. Добавить root CA
Подставь путь к своему root CA:
certutil -d sql:"$HOME/.pki/nssdb" -A \
-t "C,," \
-n "local root ca" \
-i /path/to/rootCA.crt
Проверка:
certutil -d sql:"$HOME/.pki/nssdb" -L
Ожидаю запись с trust flags вида:
local root ca C,,
Потом полностью закрываю десктоп и запускаю снова.
Итог
Два разных trust store на одной машине:
- system →
curl, много системных тулов; - NSS (
~/.pki/nssdb) → часть Electron/Chromium-приложений.
Локальный CA нужно ставить туда, откуда реально проверяет клиент. Для production удобнее нормальный публичный CA — тогда этот танец на каждом рабочем месте не нужен.