簡體   English   中英

基於 Electron 的應用程序會通過系統范圍的 nodejs 環境變量嗎?

[英]Will an Electron based app pass system wide nodejs environment variables?

我是否錯誤地假設基於 Electron 的應用程序將傳遞 NodeJS 環境變量?

我們正在處理的應用程序基於 Electron 3.1.x 構建。 electron 3.1.x的環境變量列表似乎有效。 但是,如果我嘗試使用 NodeJS 中列出的任何環境變量(特別是NODE_EXTRA_CA_CERTSNODE_TLS_REJECT_UNAUTHORIZED ),它們似乎都不起作用。 我的印象是,由於 Electron 只是一個 nodejs 應用程序,它會尊重相同的環境變量。

是和不是。 環境變量當然可用於應用程序代碼( process.env ),並且 electron 本身支持一些(但不是全部NODE_*變量。

重要的是要記住 electron 是節點和 Chrome 用螺栓固定在一起的。 與 HTTP 請求特別相關,這意味着 electron 實際上有兩個並行的 HTTP 實現:瀏覽器 ( fetch /XHR) 和節點 ( require('http') )

因此,如果 HTTP 請求正在通過瀏覽器管道,則NODE_*變量無效,相反,通過節點管道發出的請求不受Chrome 標志的影響。

還有一些額外的怪癖:

  • 默認情況下,Chrome 會使用系統的 HTTP 代理設置; 節點不
  • 默認情況下,Chrome 會使用系統的根 CA 證書存儲; 節點使用內置列表
  • 通過瀏覽器管道發出的請求在 electron 開發工具的網絡選項卡中可見; 節點請求不是

所以:

  • 要在任何地方忽略 TLS 證書錯誤,您必須設置NODE_TLS_REJECT_UNAUTHORIZED=0在 main.js 的最開頭調用app.commandLine.appendSwitch('ignore-certificate-errors') 當然,出於顯而易見的原因,全面禁用證書錯誤是危險的。
  • 對於信任自簽名證書的瀏覽器管道,您應該將其添加到系統的 CA 存儲區(Windows certmgr、OS X Keychain、Linux NSS)。
  • 不幸的是, NODE_EXTRA_CA_CERTS在 electron 中被破壞,因此很難讓節點管道信任自簽名證書。 此評論建議猴子修補NativeSecureContext.prototype.addRootCerts以解決此問題。 您也可以嘗試猴子修補https.globalAgent

    無論哪種方式,我都不相信有辦法在不修改應用程序代碼的情況下獲得受信任的證書。

您可能需要修改應用程序 JS 才能使其正常工作。 如果您正在處理分布式應用程序, asar extract可能會引起您的興趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM