npm 依赖下载报错:主机名/IP与证书的altname不匹配
记录一下解决的方案:
尝试使用
//取消ssl验证
npm set strict-ssl false
npm config set registry http://registry.npmjs.org/
//如果还没成功,则将npm源更换为国内镜像:
npm config set registry http://registry.cnpmjs.org/
npm config set registry http://registry.npm.taobao.org/
如图:
为什么会这样呢?
因为npm install
走的是https协议,需要通过数字证书来保证的。
从0.9.2(包括0.10.x)开始,node.js现在默认验证证书。 这就是为什么当升级到node.js 0.8之后,它会变得更加严格的原因。参考
当使用SSL连接到服务器时,服务器要做的第一件事就是出示一个证书,上面写着 “我是api.dropbox.com”。证书具有“主题”,主题具有“ CN”(“通用名称”的缩写。)证书也可以具有一个或多个“subjectAltNames”。 当node.js连接到服务器时,node.js会获取此证书,然后验证它认为连接的域名(api.dropbox.com)是否与主题的CN或替代名称之一匹配。 请注意,在节点0.10.x中,如果使用IP连接,则IP地址必须在altnames中-node.js不会尝试根据CN验证IP。
您可以使用取消ssl验证的选项来避免这种情况,但是这会严重影响安全性。最好先诊断证书未授权的原因,然后查看该证书是否可以解决。