npm 提示 unable to verify the first certificate 的解决小结

发布于 2022-03-15 15:18:52 字数 2638 浏览 1931 评论 0

在 npm 安装包的时候,经常会提示 unable to verify the first certificate,在此对该情况的解决方案进行了一些小结,总体说来,这个问题的出现都是因为用了代理。

https是一种安全的协议,确保服务端与客户端之间传送正确性的。现在中间多了一个代理转发,有一些连接会觉得这样不靠谱,不让你们连接去连接。在npm中有一个配置可以把这个去掉,就是npm config set strict-ssl=false

我说一下我自己的网络情景吧,代理才能访问外网,但是公司在全球都有代理,一但用了国外的代理,什么google,youtube,facebook等都能非常快地访问到。所以我一直就是用npm官方的源(非https),并且配置了 strict-ssl=false

今天看到有一个非常方便的 node 调试工具 devtool 想来安装,当中用到了electron,然后就是死活安装不了,之前在安装node-sqlite3也经常提示这个问题,当时是**切换代理(比如从美国的代理切换到瑞典的代理)**就可以了。但今天这个方法不凑效。

肯定是因为里面下载 electron 的时候用了一段 https 的下载连接,但该连接建立不起来。由于fiddler抓取不到相应的url,我就在出错提示的目录找到了下载的源代码。于是找了相应的npm包的源代码,关键代码如下

var url = process.env.NPM_CONFIG_ELECTRON_MIRROR || 
    process.env.ELECTRON_MIRROR || 
    opts.mirror || 
    'https://github.com/atom/electron/releases/download/v'

简单地说,安装文件另外起了一份镜像,不用 npm 的,而且是 electron 的,但是其中的下载配置信息,例如 strict-ssl 并没有正确地传送到这里。从 这个issue 可看到,由于里面用了一个严格的等于(opts.strictSSL === false),但是环境变量却是一个字符串,所以给环境变量 npm_config_strict_ssl 配置任何值都无法严格等于布尔值 false。

分析到原因后,很容易验证,直接敲

nugget https://github.com/atom/electron/releases/download/v0.36.8/electron-v0.36.8-win32-ia32.zip

就会提示unable to verify the first certificate

如果加上参数

--no-strict-ssl

则完全没有问题的。

但是问题还是要解决,即使是向 electron 发 pr 也没这么快合并。我突然看到这里提示 electron 是可以配置镜像的,于是利用环境变量

set ELECTRON_MIRROR=http://npm.taobao.org/mirrors/electron/&& npm i devtool -g

就顺顺利利地安装上了~~~

总结一下,遇到这个问题的解决方案

  1. 不用代理
  2. 不用 https 的源(改用 http)
  3. 要用 https 的源,也要配置 strict-ssl=false
  4. 有可能你的安装程序并不用 npm 的配置去安装,这个要具体看源代码

用相同的原理解决 node-gyp 的问题

在安装 node-canvas 的时候,也总是提示这个,不同的是,这次提示错误 的地方找不到源代码的所在地

gyp ERR! stack Error: unable to verify the first certificate
gyp ERR! stack at Error (native)
gyp ERR! stack at TLSSocket.<anonymous> (_tls_wrap.js:1016:38)
gyp ERR! stack at emitNone (events.js:67:13)
gyp ERR! stack at TLSSocket.emit (events.js:166:7)
gyp ERR! stack at TLSSocket._finishInit (_tls_wrap.js:585:8)

这个 _tls_wrap.js 在哪里,要整个电脑去搜索吗?

思考了一会之后,根据上一次的总结,这肯定是一个 https 的问题,要是想知道是哪个 https 连接有问题是比较麻烦的。但是如果这样 google

node-gyp strict ssl

会很快找到 issus:try invoking node-gyp with NODE_TLS_REJECT_UNAUTHORIZED=0.

于是设置环境变量,安装~~~~一切正常

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

linfzu01

文章 0 评论 0

可遇━不可求

文章 0 评论 0

枕梦

文章 0 评论 0

qq_3LFa8Q

文章 0 评论 0

JP

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文