2012-01-15 143 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