Node.js使用Axios请求本地ASP.NET Core 3.1应用时出现UNABLE_TO_VERIFY_LEAF_SIGNATURE错误的解决方法
这个问题我之前帮同事排查过,其实核心原因就是Node.js默认不信任ASP.NET Core生成的自签开发证书,再加上ASP.NET Core默认会把HTTP请求重定向到HTTPS,所以不管你请求5000还是5001端口,最终都会触发证书验证失败的错误。下面给你几个实用的解决方案,按场景选就行:
一、快速解决:临时禁用证书验证(仅开发环境使用)
如果只是想快速测试功能,不想折腾证书配置,可以给Axios配置一个忽略证书验证的HTTPS代理。这样既能处理HTTPS请求,也能解决HTTP重定向后的证书问题。
单请求配置
const axios = require('axios'); const https = require('https'); async function fetchLocalApp() { try { // 创建不验证证书的HTTPS代理 const httpsAgent = new https.Agent({ rejectUnauthorized: false }); const result = await axios.get('https://localhost:5001/', { httpsAgent }); console.log('请求成功:', result.data); } catch (err) { console.error('请求失败:', err.message); } } fetchLocalApp();
全局配置(所有Axios请求生效)
如果你的项目里有很多请求要发,可以全局设置Axios的默认代理,省得每个请求都写:
const axios = require('axios'); const https = require('https'); // 全局配置忽略证书验证 axios.defaults.httpsAgent = new https.Agent({ rejectUnauthorized: false }); // 之后的请求直接用axios即可 async function test() { const result = await axios.get('https://localhost:5001/'); console.log(result.data); }
⚠️ 注意:这个方法绝对不能用在生产环境,会带来严重的安全风险!
二、更安全的方案:信任ASP.NET Core开发证书
如果长期在本地开发,建议把ASP.NET Core的自签证书添加到Node.js的信任列表里,一劳永逸。
步骤1:找到并导出开发证书
- Windows:打开「证书管理器」(运行里输入
certmgr.msc),依次展开「当前用户」→「个人」→「证书」,找到名为ASP.NET Core HTTPS Development Certificate的证书,右键导出为Base64编码的.crt文件(比如命名为aspnet-dev.crt)。 - macOS:打开「钥匙串访问」,在「登录」→「证书」里找到同名证书,右键导出为
.crt格式。
步骤2:添加到Node.js信任列表
运行命令npm config get cafile,如果返回一个文件路径(比如/usr/local/etc/openssl/cert.pem),就把刚才导出的.crt文件内容追加到这个文件里;如果没有返回路径,说明Node.js使用的是系统根证书,直接把证书导入系统的「受信任的根证书颁发机构」(Windows)或在钥匙串里设置证书为「始终信任」(macOS)即可。
三、临时测试:关闭HTTPS重定向
如果你只是想测试HTTP请求,可以修改ASP.NET Core的代码,关闭HTTPS重定向:
在Startup.cs里找到这一行代码,注释掉它:
// app.UseHttpsRedirection();
这样请求http://localhost:5000就不会被重定向到HTTPS了,Axios直接请求HTTP地址就不会有证书问题。不过开发环境还是建议保留HTTPS,所以这个方法只适合临时验证问题。
内容的提问来源于stack exchange,提问作者Dev

