Next.js中fetch请求失败:自签名证书链问题求助
解决Next.js中fetch请求出现self-signed certificate错误的方案
针对你遇到的self-signed certificate in certificate chain导致fetch失败的问题,以下是几个可行的解决办法:
1. 给服务端fetch添加自定义Agent(仅开发环境使用)
Next.js的async页面组件中,fetch会在服务端执行,此时可以通过Node.js的https模块创建跳过证书验证的Agent,传给fetch:
import React from "react"; import https from "https"; // 仅开发环境使用,生产环境请勿跳过证书验证 const agent = process.env.NODE_ENV === "development" ? new https.Agent({ rejectUnauthorized: false }) : undefined; const Page = async({ searchParams }) => { const res = await fetch("https://jsonplaceholder.typicode.com/users", { agent }); const data = await res.json() console.log(data); return <div></div>; }; export const metadata = { title: "Movie App", }; export default Page;
2. 通过环境变量禁用SSL验证(全局生效)
启动Next.js项目时,添加NODE_TLS_REJECT_UNAUTHORIZED=0环境变量,跳过Node.js的SSL证书验证:
NODE_TLS_REJECT_UNAUTHORIZED=0 next dev
如果是Windows系统(PowerShell),执行:
$env:NODE_TLS_REJECT_UNAUTHORIZED=0; next dev
3. 导入自定义CA证书(推荐生产/测试环境使用)
如果是对接使用自签名证书的内部API,建议将CA证书文件(如ca.crt)放到项目根目录,通过环境变量指定信任该证书:
NODE_EXTRA_CA_CERTS=./ca.crt next dev
这种方式比直接禁用验证更安全,适合需要长期使用自签名证书的场景。
内容的提问来源于stack exchange,提问作者Burak
相关产品推荐
相关产品推荐

