2012-01-15 310 views
48

我有一個Ubuntu虛擬機無法連接到SSL的網站,即https。如果URL以http開頭,它可以成功地從互聯網上下載文件。npm安裝無ssl

npm install將通過https下載依賴關係。反正它有通過http下載嗎?

+0

使用HTTPS下載時會出現什麼錯誤? – Bruno 2012-01-16 00:48:57

+0

它掛了一段時間,然後我得到這個 - > https://gist.github.com/1619128 – 2012-01-16 04:52:49

+0

而不是發佈這個錯誤消息在gist.github上,你應該編輯你的問題,並把它放在那裏。雖然它沒有提及HTTPS。附加日誌中的任何內容? – Bruno 2012-01-16 10:07:46

回答

123

嘗試,而默認HTTPS一個使用命令

npm config set registry http://registry.npmjs.org/ 
+3

注意,如果您想使用'-g'標記 – lordvlad 2014-01-14 20:32:02

+0

安裝全局程序包,則需要使用額外的'sudo'來解決此問題,這可能會對代理/ Web防火牆後面的任何其他人有所幫助並且在安裝時在'SSL23_GET_SERVER_HELLO'上收到錯誤。 – meklarian 2015-07-22 14:40:57

+0

我這樣做,仍然得到相同的錯誤。日誌顯示,使用http的npm查詢,但我仍然得到未知的協議ssl – FrenchFigaro 2018-01-25 14:00:50

10

正如conlinf說,下面應該工作更改註冊表的HTTP版本:

npm config set registry http://registry.npmjs.org/

現在,加我的話,你也應該考慮到沒有ssl的下載允許一箇中間人攻擊。只有向會閱讀帖子的人添加警告。

如果你是一個獨立開發者,那麼直接在http下載應該不會有太大麻煩,但是如果我想用node.js攻擊公司,我會考慮通過npm提供惡意代碼......並且執行這樣的攻擊ssl會容易得多。

+0

你能解釋你如何做到這一點? – Mukus 2015-09-10 00:39:39

+2

@Mukus DNS通過設置本地流氓DNS而多次遭到入侵,從而劫持目標服務器的「registry.npmjs.org」。由於沒有TLS,所以通過使用root權限進行證書籤名,npm服務器沒有握手驗證。胭脂DNS後面的胭脂npm服務器可以提供任何想要的代碼,這是在npm安裝期間運行的。由於安全原因,請致電 – thesmart 2016-04-27 20:54:01

+0

+1。我在工作時遇到了npm over'https'的問題,簽入我們的VPN解決了我的問題。 – Roy 2016-08-01 13:54:10

2

經過大量的試驗和錯誤後,我發現除了上面所說的所有內容之外,我還需要將https-proxy設置爲http proxy的值。

所以最終.npmrc文件看起來像

proxy=http://username:[email protected]:port/ 
https-proxy=http://username:[email protected]:port/ 
strict-ssl=false 
registry=http://registry.npmjs.org/ 

注意,代理和HTTPS代理是相同的!

見本線程的評論更多信息:

https://github.com/npm/npm/issues/8034

此外,我更新的好措施的npmrc後跑了npm cache clean --force,但我不知道是否需要它。

希望有所幫助。

+0

將http_proxy值設置爲https_proxy對我有用。謝謝。 – mmk 2018-01-31 09:47:31