React Native Axios 允许自签名 ssl 证书

b3n*_*m1n 7 javascript https android react-native axios

我正在用 React Native 编写一个应用程序,我需要发出 API 请求。该服务器运行在具有自签名 SSL 证书的服务器上,因此我需要 Axios 和 React Native 使用自签名证书发出请求并接受响应。

  • 我无法从官方证书颁发机构获得证书。
  • 我已经尝试过使用https.Agent,但是在使用 React Native 时这似乎是不可能的(https 模块是节点标准库的一部分,它不包含在 React Native 中),所以这也不是一个有效的解决方案。
  • 我更愿意继续使用 Axios,但是如果有任何具有类似功能的库,我会考虑切换库(我已经尝试过一些,但没有提供允许自签名证书的功能)。

这是我的项目中的一些示例代码(url 是服务器的 IP):

import axios from 'axios';

const instance = axios.create({ });
instance.get(url)
    .then(res => {
        this.setState({dataSource: res.data});
     })

Run Code Online (Sandbox Code Playgroud)

顺便说一句,当我使用 ngrok 时,一切正常,因此自签名证书绝对是唯一的问题。

del*_*8uk 0

我今天解决了这个问题!我也有一个 React Native 应用程序,并且我使用了apisauce一个很棒的库,它在底层使用了 axios。

我的 API 在本地运行在 LAMP 堆栈上,并且我在 中有一个假的开发域/etc/hosts,并且 Apache 配置了自签名证书。

不要禁用 SSL 验证,而是信任您的证书!

Android 上的说明会有所不同,但对于 iOS,我执行了以下操作。

  • 通过 Airdrop 将 selfsigned.crt 发送到我的 iPhone
  • 在“设置”应用程序中安装配置文件
  • 在我的开发机器上下载并启动 Proxyman https://proxyman.io/
  • 在 iPhone 上的 Wifi 设置中设置代理(开发机 IP 端口 9090)
  • 打开 Safari 并转到 proxy.man/ssl,下载证书
  • 在“设置”应用程序中安装配置文件
  • 在“设置”>“常规”>“关于”>“证书信任设置”中启用对两个证书的完全信任

现在你应该可以https://your-dev-domain.whatever毫无问题地访问了,并且 apisauce/axios 将不再返回 Network Error

完成开发后,请记住返回 Wi-Fi 设置并再次关闭代理!