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

2026-03-20 55 浏览 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. 于是设置环境变量,安装~~~~一切正常


发布评论

发布评论前请先 登录
取消
0 评论
点赞
收藏

评论列表 0

暂无评论