使用npm命令时SSL错误:CERT_UNTRUSTED


159

我正在尝试使用npm命令安装Express Framework,但出现以下错误。

错误消息是

E:\myFindings\nodejs_programs\node>npm install -g express
npm http GET https://registry.npmjs.org/express
npm ERR! Error: SSL Error: CERT_UNTRUSTED
npm ERR!     at ClientRequest.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\request\main.js:409:26)
npm ERR!     at ClientRequest.g (events.js:185:14)
npm ERR!     at ClientRequest.EventEmitter.emit (events.js:88:17)
npm ERR!     at HTTPParser.parserOnIncomingClient [as onIncoming] (http.js:1445:7)
npm ERR!     at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:111:23)
npm ERR!     at CleartextStream.socketOnData [as ondata] (http.js:1356:20)
npm ERR!     at CleartextStream.CryptoStream._push (tls.js:396:27)
npm ERR!     at SecurePair.cycle (tls.js:751:20)
npm ERR!     at EncryptedStream.CryptoStream.write (tls.js:131:13)
npm ERR!     at Socket.ondata (stream.js:38:26)
npm ERR!  [Error: SSL Error: CERT_UNTRUSTED]
npm ERR! You may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "-g" "express"
npm ERR! cwd E:\myFindings\nodejs_programs\node
npm ERR! node -v v0.8.0
npm ERR! npm -v 1.1.32
npm ERR! message SSL Error: CERT_UNTRUSTED
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     E:\myFindings\nodejs_programs\node\npm-debug.log
npm ERR! not ok code 0

帮我整理一下

Answers:


316

您可以使用以下命令绕过https:

npm config set strict-ssl false

或从https或http设置注册表URL,如下所示:

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

但是,我个人认为绕过https不是真正的解决方案,但是我们可以将其用作解决方法。


13
有点不安全,但在现实世界中不错的解决方案。
伯纳德·索西尔

1
一旦使用上面的命令,是否可以删除旁路选项。如果是,我们如何删除旁路选项?
rash111 2016年

1
@ rash111我认为将其设置为true应该起作用:npm config set strict-ssl true
Gromer

10
“很好的现实世界解决方案” ...这一点都不好,除非您喜欢被黑客入侵。
trusktr

谢谢!在运行Ubuntu 14.04的VirtualBox VM中使用npm时,这也是必需的。这是修复CERT错误的唯一方法,即使将注册表配置为"http://registry.npmjs.org/"默认值,它也会出现。
Prahlad Yeri

53
npm ERR! node -v v0.8.0
npm ERR! npm -v 1.1.32

更新您的node.js安装。以下命令应执行此操作(从此处开始):

sudo npm cache clean -f
sudo npm install -g n
sudo n stable

编辑:好的,如果您确实有充分的理由运行软件的旧版本,npm set ca null将解决此问题。发生了,因为内置的npm证书已过期多年。


3
我目前正在使用上述两个版本,您的意思是什么,我听不懂
Sudip7 2014年

1
我的观点是:这些版本很古老,并且其中的内置npm证书都已经过期。如果您安装最新版本,它们将起作用。
alex 2014年

1
我试图安装最新版本,但在安装过程中遇到了一些问题。SO中的某人建议我安装以上版本,它已正确安装,但现在npm无法正常工作。我给你链接到我刚才的问题stackoverflow.com/questions/21850871/...
Sudip7

24
我发现,运行sudo npm cache clean -f,然后sudo npm install -g n给出了第二个命令后CERT_UNTRUSTED错误。
fuzzi

2
根据引用的链接:“这种升级节点的方法现在不稳定,不应该使用。管理Node.js版本的最佳方法是使用NVM:节点版本管理。!”
chus


9

我想我有上述错误的原因。它是为了在客户端网络中工作而提供的公司代理(虚拟专用网络)。没有这种连接,我经常会遇到相同的问题,无论是maven build还是npm install。


5

如果您落后于公司代理,请尝试使用公司代理的npm设置:

npm --https-proxy=http://proxy.company.com install express -g

3
如果您在大型组织中工作,通常会在您和Internet之间使用代理服务器。有时会导致此问题。(它对我有用)对此的一种可能测试是将计算机从网络上断开,然后在家中安装npm Express。
Michael Oakley

2

由于我通过Google偶然发现了该帖子:

尝试使用npm ci它远不止于此npm install

从手册中:

简而言之,使用npm install和npm ci之间的主要区别是:

  • 该项目必须具有现有的package-lock.json或npm-shrinkwrap.json。
  • 如果软件包锁中的依赖项与package.json中的依赖项不匹配,则npm ci将退出并显示错误,而不是更新软件包锁。
  • npm ci一次只能安装整个项目:不能使用此命令添加单个依赖项。
  • 如果已经存在一个node_modules,它将在npm ci开始安装之前被自动删除。
  • 它永远不会写入package.json或任何包锁:安装实际上是冻结的。

1

重新安装节点,然后更新npm。

首先我删除了节点

apt-get purge node

然后根据分布情况安装节点。文档在这里

然后

npm install npm@latest -g
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.