Next.js访问ASP.NET Core API报500错误:无法验证第一份证书求助
问题解答
问题本质
你遇到的unable to verify the first certificate报错和IIS Express权限无关,核心原因是:
- Next.js的
getStaticProps运行在服务端Node.js环境,不会复用浏览器的信任证书列表 - IIS Express本地开发默认使用自签名SSL证书,Node.js默认不信任未经过正规CA签发的证书
- Postman会默认信任本地自签证书、jsonplaceholder的证书由正规CA签发,所以这两个场景访问正常
解决方案
方案1:本地开发临时禁用证书校验(仅本地使用,生产环境严禁使用)
直接在fetch请求中配置跳过TLS证书校验,修改你的getStaticProps代码即可:
import https from 'https' export const getStaticProps = async () => { // 配置跳过证书校验的Agent const httpsAgent = new https.Agent({ rejectUnauthorized: false }) const res = await fetch(`https://localhost:44310/api/movies`, { agent: httpsAgent }) const data = await res.json() return { props: {movies:data} } }
也可以通过启动环境变量全局配置,修改package.json中的启动脚本:
- Windows系统:
"dev": "set NODE_TLS_REJECT_UNAUTHORIZED=0 && next dev" - Mac/Linux系统:
"dev": "NODE_TLS_REJECT_UNAUTHORIZED=0 next dev"
方案2:长期本地开发正规方案
将IIS Express的自签证书加入信任列表,避免每次跳过校验:
- 用Chrome访问你的本地API地址
https://localhost:44310,点击地址栏的锁图标,选择「证书」->「详细信息」->「复制到文件」,导出为Base64编码的X.509(.CER)格式证书 - 启动Next.js时添加环境变量
NODE_EXTRA_CA_CERTS=你的证书文件路径即可生效
额外代码优化提示
你当前代码中定义的myHeaders、requestOptions、raw变量没有被实际使用,且GET请求不需要携带body参数,这些冗余代码可以直接删除。
内容的提问来源于stack exchange,提问作者vahid
相关产品推荐
相关产品推荐

