CorBlogкейсы · ops

Статья

Десктоп приложение: 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 — тогда этот танец на каждом рабочем месте не нужен.