Axios: 如何忽略 SSL 问题

创建于 2016-11-13  ·  35评论  ·  资料来源: axios/axios

是否可以配置 Axios(在 node.js 中运行)以忽略特定的 SSL 错误(例如过期的证书)? 我想知道 SSL 证书有问题,但我希望事务无论如何都能完成(默认情况下,它会失败)。

最有用的评论

您可以将 axios 配置为使用自定义代理,并将该代理的rejectUnauthorizedfalse

// At instance level
const instance = axios.create({
  httpsAgent: new https.Agent({  
    rejectUnauthorized: false
  })
});
instance.get('https://something.com/foo');

// At request level
const agent = new https.Agent({  
  rejectUnauthorized: false
});
axios.get('https://something.com/foo', { httpsAgent: agent });

希望这可以帮助!

所有35条评论

您可以将 axios 配置为使用自定义代理,并将该代理的rejectUnauthorizedfalse

// At instance level
const instance = axios.create({
  httpsAgent: new https.Agent({  
    rejectUnauthorized: false
  })
});
instance.get('https://something.com/foo');

// At request level
const agent = new https.Agent({  
  rejectUnauthorized: false
});
axios.get('https://something.com/foo', { httpsAgent: agent });

希望这可以帮助!

@nickuraltsev
它不适用于上述更改
const https = require('https');
轴({
网址:网址,
方法:'获取',
标题:{
'内容类型':'应用程序/json'
},
响应类型:'json',
httpsAgent: new https.Agent({ rejectUnauthorized: false })
})
.then(响应 => {
})
.catch(错误 => {
})
}
}

实际上,我发现它确实有效,但它专门针对自签名证书。 它不允许过期或无效的证书。 要允许 _any_ 证书,您必须在代码顶部附近添加此行;

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

这将允许任何事情,但它也很危险,因此请谨慎使用。

@埃里克24
如果我在文件的第一行添加上面的代码,它就不起作用。
请让我知道添加的确切路径。

对我来说(需要忽略过期但有效的证书),只需在“使用严格”之后添加这一行即可; 在主 node.js 文件的顶部,在任何其他代码之前。 这是一个全有或全无的设置,但其目的是允许 HTTPS 事务完成,否则代理会因证书问题而终止事务。 也许您的特定场景与证书无关?

如果不在节点中,如何获取 https 模块???

https 模块不适用于 react-native

+1

@psahni你知道如何忽略 React Native 中的 ssl 问题吗?

@Germinate - 我仍在为同样的问题苦苦挣扎。 我们必须更改本机 android 代码。 我们必须从源代码构建 react native。 我还不知道该怎么做。
一种解决方案是请在反应本机和主服务器之间的节点中创建一个代理服务器。 并将请求从 react native 路由到节点代理到主服务器。

@psahni你试过这个解决方案吗?

@Germinate - 看起来很棒! 感谢分享。 所以在做出这些改变之后。 我们可以直接使用 react-native 模块吗?

仍然无法使用本机反应:/

它在浏览器中工作吗? 我正在将 axios 与 vue js 应用程序一起使用,并且使用自签名证书收到此 net::ERR_CERT_AUTHORITY_INVALID 错误。 建议的解决方案假设我可以使用 https.Agent 但我不知道如何在 vue 上使用 https 模块。 还有其他方法吗? 谢谢

我们在 react-native 中有 https 吗? 如果是,我们如何包括它?

如果您使用的是 nuxt/axios,则可以通过使用以下代码创建插件来实现上述目的:
这是在 nuxt 中创建插件的文档化方法: https ://axios.nuxtjs.org/extend.html

如果您使用自签名证书在本地开发 API,则这种开发模式非常有用。

import https from 'https';

export default function ({ $axios, store }) {
    const agent = new https.Agent({  
        rejectUnauthorized: false
      });    
    $axios.onRequest(config => {
        if (process.env.dev) {
            config.httpsAgent = agent;
        }                     
    });
}

什么是“发布”示例?

目前正在尝试进行发布请求,而忽略 SSL。

如果您使用的是 nuxt/axios,则可以通过使用以下代码创建插件来实现上述目的:
这是在 nuxt 中创建插件的文档化方法: https ://axios.nuxtjs.org/extend.html

如果您使用自签名证书在本地开发 API,则这种开发模式非常有用。

import https from 'https';

export default function ({ $axios, store }) {
    const agent = new https.Agent({  
        rejectUnauthorized: false
      });    
    $axios.onRequest(config => {
        if (process.env.dev) {
            config.httpsAgent = agent;
        }                     
    });
}

在模块文件夹中创建 axios.js 后,我是否以不同的方式调用我现有的 asyncData 或 axios 请求?

看看这个,它为我解决了: https :

仍然遇到这个问题。 使用 https-browserify 在浏览器中获取节点的https模块。

const instance = axios.create({
    httpsAgent: new https.Agent({  
        rejectUnauthorized: false
    })
});

instance.post("https://...");

返回ERR_CERT_AUTHORITY_INVALID

我也收到错误,使用通过 react-create-app 创建的应用程序

const axios = require('axios');
const https = require('https');

const result = await axios('https://localhost:8080/search/' + text, {
    headers: {"lang": lang},
    httpsAgent: new https.Agent({
        rejectUnauthorized: false
    })
});

我还尝试在文件开头(低于const https = require('https'); )添加process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; ,但没有任何效果。

为什么这被关闭了? 看起来没有可行的解决方案。

由于我的日志中出现“ssl 握手失败”错误,我遇到了这个线程,并考虑尝试关闭上面其他人描述的检查。 经过大量故障排除(我最初认为它与 CORS 相关)后,结果是因为我的 SSL 证书没有捆绑 CA 证书。如果您怀疑可能是这样,请使用免费 SSL 之一检查诸如https://www.ssllabs.com/ssltest/https://www.digicert.com/help/ 之类的服务以确认您的证书是好的。 希望这可以帮助别人。

我也突然在这个问题上苦苦挣扎(尽管没有改变任何东西)。 对我来说修复它的只是通过新选项卡执行标准的 GET 请求。 我的意思是,如果您有一个路由“/users”,请尝试使用 {serverPath}/users 打开一个新选项卡。 它帮助了我,虽然我不知道为什么。

您也可以在启动开发环境时添加环境变量:

export NODE_TLS_REJECT_UNAUTHORIZED=0 && yarn dev --env.NODE_TLS_REJECT_UNAUTHORIZED=0

也许将它添加到您的 package.json 文件中

"scripts": {
  "dev": "export NODE_TLS_REJECT_UNAUTHORIZED=0 && nuxt --env.NODE_TLS_REJECT_UNAUTHORIZED=0",

我面临同样的问题。 我正在使用axios并使用 POST 方法。 我尝试了上面提到的所有解决方案,但没有运气。 有没有人找到有效的解决方案? 谢谢你。

我无法让它为单个实例工作。

// doesn't work
axios.create({
    httpsAgent: new https.Agent({ rejectUnauthorized: false })
});

// it works
https.globalAgent.options.rejectUnauthorized = false;

使用节点;
这是 SSL 错误: unable to get local issuer certificate (20) (来自 curl 请求)

React Native 有关于此的任何更新吗?

我遇到了与@Falci相同的问题 - 仅在全局设置标志时才有效。 不过我的问题有点不同, Error: self signed certificate in certificate chain

我面临同样的问题。 我正在使用axios并使用 POST 方法。 我尝试了上面提到的所有解决方案,但没有运气。 有没有人找到有效的解决方案? 谢谢你。

import axios from "axios";
const https = require('https');

const resp = await axios({
      url,
      method: "POST",
      auth,
      httpsAgent: new https.Agent({
        rejectUnauthorized: false
      })
    });

为我工作。

由于 React Native 环境被困在这里。 请为 React Native 应用程序提供任何解决方案?

@佛照

如果您尝试使用无效证书,您可以尝试遵循以下方法:

  1. 在你的 macbook 中安装证书
  2. 强制信任证书并将其导出
  3. iOS - 在设备上安装导出证书并解决问题。
    Android - 在设备上安装导出的证书并将以下内容添加到您的 network_security_config.xml 文件中。
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system"/>
            <certificates src="user"/>
        </trust-anchors>
    </base-config>
     ....
</network-security-config>

这个解决方案对我有用。
谢谢!

@Fonger请用点击率和示例详细说明。

https 模块用于节点,在 Vue/React/ 中不起作用...基本上结果与process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
如果您想忽略 SSL,因为您正在使用 SSR 并且无论如何您都在本地服务器上预取数据,这不会导致任何安全问题。

确保在服务器上设置该 env 变量,我在尝试在客户端设置它时犯了错误,因此服务器仍然崩溃。

@tamangsuresh为什么是我?

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

achingbrain picture achingbrain  ·  3评论

samayo picture samayo  ·  3评论

jdpagley picture jdpagley  ·  3评论

varmeh picture varmeh  ·  3评论

Baoyx007 picture Baoyx007  ·  3评论