nodejs“ npm ERR!代码SELF_SIGNED_CERT_IN_CHAIN”


78

我是nodejs和npm的新手。我正在尝试安装log4js,这是安装命令:

npm install log4js

我是从Windows命令行运行的,经过一段时间的标记旋转后,出现以下错误:

npm ERR! Windows_NT 6.3.9600
npm ERR! argv "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "log4js"
npm ERR! node v0.12.0
npm ERR! npm  v2.5.1
npm ERR! code SELF_SIGNED_CERT_IN_CHAIN

npm ERR! self signed certificate in certificate chain
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <http://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     C:\srv\npm-debug.log

我试着做 npm config set ca=""此处的建议进行操作:http : //blog.npmjs.org/post/78085451721/npms-self-signed-certificate-is-no-more,但我仍然遇到此错误。

我该如何解决并安装NPM?



由于公司安装了称为websense的产品,因此出现了此问题。它正在劫持证书。移除已virus解决的问题
BozoJoe

Answers:


177

根据npm博客, LTS不受此问题的影响,因此更喜欢使用最新版本。

在较早版本中,npm将具有一个自签名的ca文件,在建立连接时会在安全SSL模式下使用ca文件,并且npm注册表部署了更新的SSL证书它与较早的npm的ca文件不兼容,因此由于SSL

而导致连接错误。但是,如果您遇到此错误,则以下任何一个步骤都可以帮助您
1)升级npm的版本

npm install npm -g --ca=null

2)告诉您当前版本的npm使用节点的ca而不是内置在npm的ca中

npm config set ca=""


3)您还可以禁用strict-ssl模式来解决旧版本中的错误,但是您要清除安全性

npm set strict-ssl false


1
解决了我的问题。我必须以超级用户身份运行它;-)
Jeevan

@geoidesic它对我来说在docker文件中起作用。在安装npm之前,请尝试使用RUN命令。
Deepak Tekc​​handani

1
这是一种不安全的方法,使您容易受到MITM攻击。正确的解决方案是找到实际使用的证书,并将其添加到您的npm cafile中。
HA

3
这解决了我的问题:npm set strict-ssl false
塔伦

1
@AkshayVijayJain我的npm版本是6.13.4
Tarun

51

我在Windows 10上遇到了同样的问题。

打开Windows powerShell并输入以下命令:

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

然后,您可以使用:

npm install [your package]

5
这应该是公认的答案。将strict-ssl设置为false是危险的。感谢您解决这个头痛问题。
jarodtaylor

我仍然在运行此cmd时收到错误消息。帮助!
manish kumar



4

虽然将StrictSsl设置为false是一个选项,但它会损害您的npm安全性。我建议不要禁用它。以下说明详细说明了Shreedhar的使用cafile的内容。尽管它是从Windows 10机器的角度编写的,但可以对其进行修改。

我们公司通过代理使用SSL Inpsection,因此至少我们需要包括SSL Inspection证书。以下说明假定您能够在尝试使用外部到达npm功能的计算机上使用现代Web浏览器。

  1. 在命令控制台中,运行以下命令: npm config list
  2. 记录metrics-registry的值。这应该是一个URL。
  3. 打开浏览器到URL。在撰写此答案时,它是https://registry.npmjs.org/
  4. 打开该站点的证书信息。对于Windows上的Chrome,这涉及单击地址栏中URL左侧的挂锁图标,然后选择选项证书
  5. 检查认证路径。对我来说,有我们的公司CA和SSL检验证书。
  6. 将每个证书下载为编码为.cer或.crt文件的Base64。
  7. 将所有证书原样编译为一个.cer或.crt文件。
  8. 将此文件放入用户文件夹。尽管我们有一个基于网络的用户文件夹,但我还是建议并使用一个基于本地计算机的文件夹。注意此文件的完整路径。
  9. 在命令控制台中,运行以下命令: npm config set cafile "C:\Local\Path\To\cafile4npm.cer"修改步骤8中记录的路径和文件。
  10. 运行您的npm install命令。

我从未使用过docker映像,但也许我可以帮忙。您收到的错误的详细信息是什么?
gregsonian

没有多余的细节;与OP标题相同的错误。
geoidesic

我该怎么做?将每个证书下载为编码为.cer或.crt文件的Base64。当我打开“认证路径”时,没有下载的选项吗?必须安装正确吗?我的问题是node_modules中存在真正的未签名证书。
约翰·彼得斯

谢谢。运行npm config list会显示一个带有cafile = ...条目的全局/ usr / local / etc / npmrc,这使我的日子变得很糟,直到我找到这个答案。谢谢。
HaVonTe

@JohnPeters如果单击URL地址栏左侧的挂锁图标,则应该有一个查看证书的选项。在Windows 10中,弹出的窗口包含3个选项卡:“常规”,“详细信息”和“认证路径”。虽然“证书路径”选项卡显示了您与服务器之间的所有证书,但可以从“详细信息”选项卡下载文件。在Windows 10上,该按钮为“复制到文件...”
gregsonian

2

您是否也尝试过cafile将所有pems容纳在一个文件中的设置?npm添加根CA

如果您在.npmrc文件中使用代理,建议您将no_proxy环境变量设置为<server IP address>


2

在CentOS和其他Linux发行版中,您需要配置NPM以使用您的证书颁发机构文件:

npm config set cafile "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem" -g

显然,检查文件是否存在并包含您可能遇到的所有CA根目录(例如,公司代理)。




0

以上答案均无助于我的处境。罪魁祸首是基于软件包代理程序的6.0.1之前的版本。确实,所有者承认在其包装的测试文件夹中寄出了自签名证书。这迫使重新安装-D和-g,但问题仍在发生。

我通过在node_modules文件夹中搜索* .pem找到了该证书。

仍在努力让npm缓存听我说。我当然是假人吧?

我将回发其他发现。

找到解决方案

2020年7月7日

今天,我们的Angular应用程序已从8.3升级到10.0。你猜怎么了?错误消失了。根本原因是有人发布了一个未签名的证书,这使得它在NPM模块库中显得太深了。甚至NPM 6.15都拥有它!


0

我在这里尝试了许多解决方案,但没有一个真正适合我。我尝试更新npm,但是超时(将注册表设置为http://registry.npmjs.org/)或403禁止响应(当注册表设置为http s://registry.npmjs.org/时)

最后,realsing,我的问题是由暂时落后的代理造成的,什么到底的工作对我来说是:

npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080

(信贷:https : //stackoverflow.com/a/12832637/4191296


0

您可以禁用TLS连接的证书验证:

NODE_TLS_REJECT_UNAUTHORIZED=0 npm install puppeteer


-1

我重新安装了节点js和angular cli。它开始工作了!


1
尽管此链接可以回答问题,但最好在此处包括答案的基本部分并提供链接以供参考
Prathamesh更多
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.