npm 提示 unable to verify the first certificate 的解决小结
在 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
就顺顺利利地安装上了~~~
总结一下,遇到这个问题的解决方案
- 不用代理
- 不用 https 的源(改用 http)
- 要用 https 的源,也要配置 strict-ssl=false
- 有可能你的安装程序并不用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论