在 Node.js 环境中使用淘宝镜像安装依赖时,遇到 CERT_HAS_EXPIRED 错误和 TLS 验证问题是一个常见的问题,特别是随着 Node.js 和 npm 的版本更新,TLS 证书的管理变得更加严格。切换至淘宝镜像时,出现了 TLS 验证错误。这是因为 npm 从 v7 版本开始加强了 TLS 证书验证,导致某些镜像源(如淘宝镜像)未及时更新或没有支持最新的 TLS 协议
问题分析
在使用 npm 时,你遇到了以下几个问题:
- 清空npm 缓存
npm cache clean --force重新安装无法成功 - 使用
ping https://registry.npm.taobao.org说明网络正常 - 查看代理
npm config get proxy npm config get https-proxy都为空说明不是代理异常 - npm 更新无效:你尝试通过
npm install -g npm更新 npm,但更新后仍然无法成功安装依赖。 - 通过查询资料后发现 有一个TLS的东西,解决过程如下:
解决过程
- 镜像源更换:切换淘宝镜像
npm config set registry https://registry.npm.taobao.org
npm ERR! code CERT_HAS_EXPIRED
npm ERR! errno CERT_HAS_EXPIRED
npm ERR! request to https://registry.npm.taobao.org/miniprogram-api-typings/-/miniprogram-api-typings-3.12.0.tgz failed, reason: certificate has expired
npm ERR! A complete log of this run can be found in: C:\Users\uljdc\AppData\Local\npm-cache\_logs\2024-11-12T07_27_21_890Z-debug-0.log
- 禁用 TLS 证书验证:你通过设置
npm config set strict-ssl false来禁用 npm 的 TLS 证书验证,解决了安装依赖的问题。虽然这能够绕过证书验证的问题,但禁用证书验证可能带来安全风险,尤其是与公共 npm 仓库的通信时,可能暴露于中间人攻击等安全威胁。 后案装成功
推荐解决方案
- 优先使用官方 npm 镜像:建议使用官方的 npm 镜像源(registry.npmjs.org)或 registry.npmmirror.com,避免依赖证书过期的淘宝镜像。切换镜像源后,可以通过以下命令恢复 npm 默认的行为:
- 使用较新的 Node.js 和 npm 版本:建议将 Node.js 和 npm 更新到较新的版本,特别是在升级了操作系统或证书时,确保环境是最新的。可以使用 nvm(Node Version Manager)来轻松管理不同的 Node.js 版本:
- 慎用 strict-ssl false 设置:禁用 TLS 证书验证虽然能够解决问题,但应当谨慎使用,最好在生产环境中避免此做法,因为它会让系统暴露于潜在的安全威胁之下。
- 报告问题给 npm 官方:如果你遇到的是 npm 本身的问题,可以向 npm 官方仓库报告问题,查看是否有相关的 bug 或解决方案。
总结,在实际使用过程中 手动下载证书方案 比较复杂需要去微软官方查找对应资料, 切换NODE.JS版本方案 可能会由于node版本不匹配导制某些包无法使用 禁用 TLS 证书验证方案 简单快,所以在紧 急情况下使用禁用 TLS 方案应急较稳。