在不使用SSL的情况下进行npm安装

63

我有一台Ubuntu虚拟机,它在连接ssl网站(即https)时遇到了问题。如果url以http开头,它可以成功地从互联网下载存储。

npm install将通过https下载依赖项。是否有任何方法使其通过http下载?


使用HTTPS下载时,您会遇到哪些错误? - Bruno
它会卡一段时间,然后我会得到这个 -> https://gist.github.com/1619128 - Ken Hirakawa
1
你应该编辑你的问题并将错误信息放在那里,而不是在gist.github上发布。虽然它没有提到HTTPS,但其他日志中有什么信息吗? - Bruno
4个回答

145

尝试使用以下命令将注册表更改为http版本而不是默认的https版本

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

3
请注意,如果您想使用 -g 标志安装全局包,则需要使用额外的 sudo 命令执行相同的操作。 - lordvlad
1
这个解决了我的问题,对于那些也在代理/网络防火墙后面并在安装过程中遇到SSL23_GET_SERVER_HELLO错误的人可能会有所帮助。 - meklarian
1
我已经尝试了这样做,但仍然出现相同的错误。日志显示npm使用http进行查询,但我仍然收到未知协议ssl的错误提示。 - FrenchFigaro
1
这会导致安全漏洞的出现。 - matanster

14

如conlinf所说,以下命令应该可以解决问题:

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

此外,还需要注意的是,如果没有启用SSL下载可能会遭受中间人攻击。请向读者提出警告。

如果您是个人开发者,则直接使用http下载可能不会带来太多麻烦,但如果攻击公司使用node.js,则可能会通过npm传递恶意代码...并且未启用SSL时执行这样的攻击将更加容易。


你能解释一下你会怎么做吗? - Mukus
4
DNS 已经被设置本地假DNS并多次遭到破坏,从而劫持了目标服务器上的 "registry.npmjs.org"。由于没有 TLS,因此无法通过与根证书签名的握手验证 npm 服务器。位于假 DNS 后面的假 npm 服务器可以传递任何代码,并在 npm 安装过程中运行。 - thesmart
出于安全原因,请在工作时使用VPN,遇到npm在https上出现问题时,我通过登录VPN解决了这个问题。 - Roy

14

经过多次尝试和错误,我发现除了上述所有内容之外,我还需要将https-proxy设置为http proxy的值。

因此最终的.npmrc文件如下所示:

proxy=http://username:password@proxy.address:port/
https-proxy=http://username:password@proxy.address:port/
strict-ssl=false
registry=http://registry.npmjs.org/

请注意,代理和https代理是相同的!

有关更多信息,请参见此线程中的评论:

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

此外,在更新npmrc后,我运行了npm cache clean --force,但我不确定是否需要。

希望这能帮到你。


2
将 http_proxy 的值设置为 https_proxy 对我很有效。谢谢。 - mmk

4

我曾经在公司的防火墙后遇到问题,将SSL严格模式设置为false解决了这个问题。

npm config set ssl-strict=false


1
npm ERR! ssl-strict 不是一个有效的 npm 选项。 - Ap0st0l
你是对的,它是strict-sslhttps://docs.npmjs.com/cli/v9/using-npm/config#strict-ssl - Jeremy Fiel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接