Будет ли приложение на базе Electron передавать системные переменные среды nodejs? - PullRequest
0 голосов
/ 30 октября 2019

Неправильно ли я считать, что приложение на базе Electron будет передавать переменные среды NodeJS?

Приложение, с которым мы имеем дело, основано на Electron 3.1.x. Список переменных среды для электрона 3.1.x , кажется, работает. Однако, если я пытаюсь использовать любую из переменных среды , перечисленных в NodeJS (особенно NODE_EXTRA_CA_CERTS или NODE_TLS_REJECT_UNAUTHORIZED), они, похоже, не работают. У меня сложилось впечатление, что, поскольку Electron - это просто приложение nodejs, оно будет учитывать те же переменные среды.

1 Ответ

1 голос
/ 30 октября 2019

Да и нет. Конечно, переменные Env доступны для кода приложения (process.env), и сам электрон поддерживает некоторые (, но не все ) NODE_* переменные.

Важно помнить, что электрон является узломи Chrome скреплены болтами. Это имеет особое значение для HTTP-запросов. Это означает, что электрон на самом деле имеет две параллельные реализации HTTP: браузер (fetch / XHR) и узел (require('http')).

Таким образом, если запросы HTTP проходят черезПерестановка в браузере, переменные NODE_* не имеют никакого эффекта, и, наоборот, запросы, сделанные через верстку узла, не затрагиваются Флаги Chrome .

Существуют дополнительные причуды:

  • По умолчанию Chrome будет использовать системные настройки прокси-сервера HTTP;узел не
  • По умолчанию Chrome будет использовать хранилище сертификатов корневого ЦС системы;узел использует встроенный список
  • Запросы, сделанные через подключение к браузеру, видны на вкладке "Электронные инструменты разработчика";запросы узлов не

Итак:

  • Чтобы везде игнорировать ошибки сертификата TLS, вы должны установить NODE_TLS_REJECT_UNAUTHORIZED=0 и в самом начале основного.js, звоните app.commandLine.appendSwitch('ignore-certificate-errors'). Конечно, отключение сертификатов ошибок по всем направлениям опасно по очевидным причинам.
  • Чтобы браузер доверял самозаверяющему сертификату, вы должны добавить его в хранилище CA своей системы (Windows certmgr, OS X Keychain, LinuxNSS).
  • К сожалению, NODE_EXTRA_CA_CERTS - это сломан в электроне, поэтому сложно заставить узел доверять самоподписанному сертификату. Этот комментарий предлагает исправление обезьяны NativeSecureContext.prototype.addRootCerts, чтобы обойти проблему. Вы также можете попробовать сделать исправление обезьяны https.globalAgent.

    В любом случае, я не верю, что есть способ получить сертификат без доверия, не изменяя код приложения.

Вам, вероятно, придется изменить приложение JS, чтобы это работало. Если вы имеете дело с распределенным приложением, asar extract, вероятно, будет представлять интерес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...