解决 Yarn 和 NPM 安装时出现“certificate has expired”错误

1,184 阅读2分钟

解决 Yarn 和 NPM 安装时出现“certificate has expired”错误

最近在使用 Yarn 和 NPM 安装依赖时,遇到了以下错误信息:

error Error: certificate has expired

详细:[2/4] Fetching packages... error Error: certificate has expired at 
TLSSocket.onConnectSecure (node:_tls_wrap:1674:34) at TLSSocket.emit (node:events:519:28) at 
TLSSocket._finishInit (node:_tls_wrap:1085:8) at ssl.onhandshakedone (node:_tls_wrap:871:12) 
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

这通常是由于 SSL/TLS 证书过期或配置问题导致的。解决这个问题的过程中,我尝试了几个方法,下面分享一下最终的解决方案。

问题分析

该错误表明,在 Yarn 或 NPM 与远程服务器进行通信时,SSL/TLS 证书验证失败,通常是证书过期或系统时间不正确导致的。这会影响包管理器下载依赖项,因此需要解决这个问题。

解决步骤

1. 禁用 SSL 严格验证

在某些情况下,禁用 SSL 严格验证可以绕过证书验证的问题。可以通过以下命令禁用 Yarn 和 NPM 的 SSL 严格验证:

yarn config set "strict-ssl" false

这样可以避免证书过期导致的验证失败,但需要注意,这会降低安全性,不推荐长期使用。

2. 配置证书文件

如果你有自定义的证书文件,可以通过以下命令指定证书文件的路径:

npm config set cafile /path/to/cert.pem

这将告诉 npm 使用指定的证书链进行验证,解决与证书过期相关的问题。

3. 更新 Node.js 和 Yarn

有时,问题可能源于较旧的 Node.js 或 Yarn 版本。建议检查和更新到最新版本:

4. 清理缓存

如果缓存中的文件损坏,也可能导致安装失败。尝试清理 npm 缓存:

npm cache clean --force

5. 检查系统时间

如果系统时间不准确,也会导致证书验证失败。确保系统时间正确,最好同步网络时间。

总结

这次问题的解决过程让我意识到 SSL/TLS 证书和系统配置对开发环境的重要性。禁用 SSL 严格验证和配置证书文件是快速解决问题的方法,但长期来说,保持环境的更新和正确配置证书是更为安全和稳妥的做法。

希望这些解决方案能帮助到遇到类似问题的开发者,提升开发效率。如果你也遇到类似问题,欢迎留言交流。