npm install时出现:npm ERR! code CERT_HAS_EXPIRED
一、问题描述
npm ERR! code CERT_HAS_EXPIRED
这个错误信息在Node.js的包管理器npm中出现时,表示npm在尝试连接到远程服务器(通常是一个npm仓库)时,发现服务器提供的SSL/TLS证书已经过期。SSL证书是用于加密HTTP连接并验证服务器身份的重要安全组件,确保数据传输的安全性和完整性。
二、为什么会报错?
当证书过期时,npm客户端会拒绝与该服务器建立安全连接,因为无法验证服务器的身份和安全性。这种情况的原因可能包括:
- 服务器端的实际问题:即服务器上部署的SSL证书确实已超过有效期,没有及时更新。
- 客户端系统时间不准确:如果本地计算机的系统时间设置不正确,尤其是设置成了一个早于当前日期的时间,可能会导致客户端认为服务器的证书已经过期。
- npm缓存了过期的证书:有时候即使服务器证书已更新,但npm缓存中仍保留着旧的、已过期的证书信息,也会触发此错误。
三、解决方法
1、更新系统时间以确保准确性
首先,你需要检查你的系统时间是否正确。你可以使用以下命令来查看和设置系统时间:
# 打开命令提示符
Win+R 输入cmd打开命令提示符
# 输入指令查看系统时间
date
# 输入指令设置系统时间
# 请将"YYYY-MM-DD HH:MM:SS"替换为正确的日期和时间。
sudo date -s "YYYY-MM-DD HH:MM:SS"
2、清除npm缓存
# 运行一下命令清除npm缓存
npm cache clean --force
3、升级Node.js和npm到最新版本
升级Node.js和npm到最新版本,新版本可能包含更可靠的证书链或更新的CA信任库。
# 执行下面的指令更新npm
npm install -g npm
4、更换镜像源
如果使用的是镜像源(如淘宝npm镜像),则检查镜像源是否也存在证书过期问题,并联系镜像维护者或者暂时切换回官方源。
查看自己的下载源
npm config get registry
提供几个可用的镜像源
npm config set registry http://registry.cnpmjs.org
npm config set registry https://registry.npmmirror.com
npm config set registry http://registry.npm.taobao.org
5、临时禁用SSL验证
在极少数情况下,临时禁用npm的SSL验证(不推荐这种方法,因为它会降低安全性)仅作为临时解决方案,直到能够通过安全方式解决问题。
切记!!!安装好后要打开SSL验证。
# 关闭ssl验证
npm config set strict-ssl false
# 打开ssl验证
npm config set strict-ssl true