在公司用 npm 裝 Chromium,因為網路設備會置換 SSL 憑證的緣故,不意外地遇上 unable to get local issuer certificate 錯誤。爬文,較常見的解法是設定 npm config set strict-ssl false 暫時關閉 SSL 檢查,麻煩一點的做法在 npm 安裝網路設備的 CA 根憑證(npm config set cafile "..."),然而,我試了兩種做法都不成功。

由錯誤訊息提示追進 /npm_modules/got/index.js 原始碼,發現出問題的這段是靠 require('https') 引用 Node.js HTTPS 模組,執行 resquest() 連上 https://www.googleapis.com,這部分屬於安裝前後的額外 Script,推測不適用 npm config 相關設定。

猜想 HTTPS 模組應存在類似 strict-ssl = false 可關閉 SSL 憑證檢查的開關,爬文找到環境參數 NODE_TLS_REJECT_UNAUTHORIZED,範例是在 JavaScript 執行 process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0; 關閉檢查,我嘗試從 DOS 設定環境變數 set NODE_TLS_REJECT_UNAUTHORIZED=0,成功達成相同效果完成下載安裝。

安全提醒:關閉 SSL 檢查有被竊聽或導向惡意網站的可能,請自行衡量風險,建議改用以下做法。

關閉 SSL 檢查存在風險,我再找到信任網路設備或 Proxy 的 CA 根憑證做法,雖然麻煩些但更安全,方法為參考 VS2017 Git SSL 憑證無效問題 介紹的步驟匯出 .cer 憑證檔,再用 NODE_EXTRA_CA_CERTS 環境變數指向 .cer 憑證檔,一樣可以成功。

Tips of disabling NODE_TLS_REJECT_UNAUTHORIZED environment variable to overcome npm install "unable to get local issuer certificate" issue when npm config strict-ssl false not working.


Comments

Be the first to post a comment

Post a comment