使用create-react-app+axios发起HTTPS请求遇CERT_HAS_EXPIRED错误求助
解决 create-react-app + Axios 中的 CERT_HAS_EXPIRED 错误
嘿,我之前在开发 React 项目时也碰到过一模一样的问题,结合你已经配置代理但仍报错的情况,给你几个针对性的排查和解决方向:
1. 先确认后端服务器的证书状态
先别着急改代码,直接在浏览器里访问你代理指向的后端 API 地址。如果浏览器弹出证书过期的警告,那问题根源就在后端服务器的 SSL 证书已经失效了——这种情况下,最根本的解决办法是让后端团队更新证书,毕竟证书过期本身就是安全隐患,不管开发还是生产环境都得处理。
2. 开发环境临时绕过 SSL 验证(仅用于开发!)
如果是开发阶段后端暂时没法更新证书,你可以通过两种方式临时禁用 SSL 验证:
方式一:给 Axios 全局配置
在你初始化 Axios 的地方(比如单独的 axios.js 文件或者项目入口文件),添加以下配置:
import axios from 'axios'; import https from 'https'; // 仅开发环境启用,生产环境务必删除! if (process.env.NODE_ENV === 'development') { axios.defaults.httpsAgent = new https.Agent({ rejectUnauthorized: false }); }
方式二:自定义代理配置(替代 package.json 的 proxy 字段)
如果你的代理需求比较复杂,推荐用 setupProxy.js 来配置,这样可以直接在代理层面禁用 SSL 验证:
- 先安装依赖:
npm install http-proxy-middleware --save-dev - 在项目的
src目录下创建setupProxy.js文件,写入:
const { createProxyMiddleware } = require('http-proxy-middleware'); module.exports = function(app) { app.use( '/api', // 你的 API 请求前缀 createProxyMiddleware({ target: 'https://your-backend-domain.com', // 替换成你的后端地址 changeOrigin: true, secure: false, // 禁用 SSL 证书验证,仅开发环境使用 }) ); };
注意:记得删除 package.json 里的 proxy 字段,避免配置冲突。
3. 排查本地 CA 证书问题
如果后端证书是有效的,但你本地还是报错,可能是你系统的根 CA 证书过期了。这种情况可以尝试更新本地的 CA 证书库:
- Windows:通过系统设置的「证书管理器」更新根证书
- macOS:打开「钥匙串访问」,找到过期的根证书并更新
- Linux:根据发行版不同,更新
ca-certificates包(比如 Ubuntu 用sudo apt update && sudo apt install --reinstall ca-certificates)
⚠️ 重要提醒:禁用 SSL 验证只是开发环境的临时 workaround,生产环境绝对不能这么做,否则会导致你的应用面临严重的安全风险!
内容的提问来源于stack exchange,提问作者Webman
相关产品推荐
相关产品推荐

