Nodejs“ npm ERR! code SELF_SIGNED_CERT_IN_CHAIN”

我是 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?

200720 次浏览

我也是新来的。除了在你的链接中提到的命令之外,我尝试了以下方法,它解决了我的问题:

  • Npm 设置为 strong-ssl false
  • 暂时关闭了迈克菲

参考资料: Azure 上的 Npm SELF _ SIGNED _ CERT _ IN _ CHAIN

禁用 strong-ssl 模式将删除此错误

由于这将关闭 SSL 安全性,如果以下两个步骤没有帮助,我们应该尝试将此作为最后一步。< br/> < br/> 由于 npm 的 SSL 证书文件与节点注册中心不兼容,可能会出现此问题。

尝试 < br/> < br/> 1)告诉当前版本的 npm 使用 node 的 ca 而不是内置的 ca < br/> < br/> npm config set ca="" < br/> < br/> 2)或升级您的 npm 版本

npm install npm -g --ca=null < br/> < br/>

正如上面 Akshay Vijay Jain 提到的,

npm config set strict-ssl false

安装最新版本前关闭 SSL :

TURNING OFF SSL BEFORE INSTALLING THE LATEST VERSION

然后安装最新版本

npm install -g npm@latest

安装成功:

INSTALL SUCCESS!!

请参阅添加的屏幕截图以获得清晰度。

在我的例子中,我安装了 Fiddler,它有一个自签名的证书,这使得 npm 安装变得疯狂。

请参阅此处如何删除自签名的 Fiddler 证书 如何删除 Fiddler 安装的根 CA 证书

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

打开 Windows PowerShell,输入以下命令:

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

Then you can use:

npm install [your package]

您是否也尝试了设置 cafile容纳在一个文件中的所有 pem

If you use proxy in your .npmrc file, I will suggest to set no_proxy environment variable with value of your <server IP address>

虽然将 StrictSsl 设置为 false 是一个选项,但它会损害 npm 安全性。我建议不要关闭它。下面的说明详细阐述了 Shreedhar 使用这个档案的帖子。虽然它是从 Windows10机器的角度编写的,但它可以被改编。

我们公司通过代理使用 SSL 检查,所以至少我们需要包含 SSL 检查证书。下面的说明假设您能够在试图使用外部 npm 函数的机器上使用现代 Web 浏览器。

  1. 从命令控制台运行以下命令: npm config list
  2. 记录指标注册表的值。这应该是一个 URL。
  3. 打开一个浏览器到这个 URL。在写这个答案的时候,它是 https://registry.npmjs.org/
  4. 打开网站的证书信息。对于 Windows 上的 Chrome 浏览器,这需要单击地址栏中 URL 左侧的挂锁图标并选择 Certificate选项。
  5. 检查认证路径。对我来说,有我们的公司 CA 和我们的 SSL 检查证书。
  6. 以 Base64编码的形式下载每个证书,并将其编码到. cer 或. crt 文件中。
  7. 将所有证书按原样编译到一个. cer 或. crt 文件中。
  8. Place this file into a user folder. Though we have a network-based users folder I recommend and use a local machine based folder. Note the full path to this file.
  9. 在命令控制台中,运行以下命令: npm config set cafile "C:\Local\Path\To\cafile4npm.cer"修改步骤8中指出的路径和文件。
  10. 运行 npm install命令。

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

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

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

截至2014年2月27日,Npm 不再支持它的自签名证书. 按照 npm 的建议,以下选项是执行下列操作之一:

升级您的 npm 版本

npm install npm -g --ca=""

或者

告诉当前版本的 npm 使用已知的注册表

npm config set ca ""

更新: npm 发布了针对不同环境的更多解决方案的 SELF _ SIGNED _ CERT _ IN _ CHAIN 和 npm 的更多帮助

阅读更多 给你

以上的答案对我的处境都没有帮助。罪魁祸首原来是基于包代理的 pre 6.0.1。事实上,店主承认他把自签的证书放在包裹的测试文件夹里寄出。这迫使重新安装-D 和-g,但问题仍在发生。

我通过在 node _ module 文件夹中搜索 * . pem 找到了这个证书。

还在努力让 npm 缓存听我说话,我当然是傻瓜了,对吧?

我会发布更多的调查结果。

找到解决办法了

2020年7月7日

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

我在这里尝试了很多解决方案,但没有一个真正对我有效。我尝试更新 npm,但是得到了超时(当注册表设置为 http://registry.npmjs.org/时)或者403禁止响应(当注册表设置为 http<是的trong>是的:// registry.npmjs.org/时)

最后,我意识到我的问题是由代理人引起的,是的最终为我所用的是:

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)

我重新安装了 node js 和 angle cli。它开始工作了! !

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

NODE_TLS_REJECT_UNAUTHORIZED=0 npm install puppeteer

在通过 Docker 构建执行时得到相同的错误。 然而,Powershell 的执行没有错误:

运行 npm 配置集 ca =””

运行 npm 设置为 stern-ssl false

This fixed the cert chain issue.

用这个命令解决这个问题

npm config set strict-ssl=false

如果你想信任另一个证书,我认为最好定义信任新证书的环境变量 NODE _ EXTRA _ CA _ CERTS = < path to. pem file > Https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file

In my case I initially setup squid to proxy all http & https requests on my local ubuntu box, but was not aware that TLS version >= 1.3 requires ssl-bump, peek and splice TLS handshake features.

以下内容可以帮助其他人了解“引擎盖下”发生了什么,这样您就可以确信您的修复是正确的。如果您不使用 squid,那么跳过这一部分,但是要注意最后的 npm 步骤。

以下是升级鱿鱼的步骤:

  1. 安装一个升级补丁 由 Diladele 提供。我还运行了: apt 升级后更新
  2. 使用 this tutorial升级鱿鱼配置,以配合新的 ssl 碰撞特性
  3. 添加 env vars HTTP _ PROXY = HTTP://your.proxy.domain:3128的 HTTP _ PROXY = HTTP://your.proxy.domain:3128
  4. Setup Firefox and/or Chrome to use squid as the http/https proxy

要启用 npm ssl 安装,请将代理 ca-certificate. pem 添加到 npm 配置中

  1. Npm 配置集文件/etc/squid/certs/squid-ca-cert. pem

运行步骤5后,从 https://registry.npmjs.org安装 npm 工作正常

我们的公司环境通过一些公司证书欺骗给我们造成了这种情况,这在 npm 和 git 操作中都对 Windows 开发人员造成了损害。对于 npm,Gregsonian 以前提供的指令(构建 cert 并指向 npm config 以使用它)仍然可以很好地工作。(参考: Win-10)我更喜欢保持启用 SSL。