android - react native java.security.cert.CertPathValidatorException : Trust anchor for certification path not found

标签 android react-native nginx expo ssl-certificate

我的 React Native 移动应用程序突然无法连接到后端。 (仅限 android 版本,iOS 没有任何问题)。 我也可以使用浏览器毫无问题地请求 API。

这只是突然发生的,当问题开始时,服务器端或移动应用程序没有任何变化,但所有 android 应用程序停止连接到服务器。

移动应用程序中的异常说: java.security.cert.CertPathValidatorException:找不到证书路径的信任 anchor 。

我已经查看了 Stack Overflow 中的每个答案,但目前没有任何效果。 这些是要点:

  • 我的移动应用程序是用 react-native 和 Expo 制作的,SSL 证书是由 LetsEncrypt 颁发的。
  • 来 self 的 API 的证书是正确的,它可以与 iOS 和任何网络浏览器完美配合。
  • 后端是一个 react-js 应用程序,运行一个 nginx 1.22.1 服务器。

在手机中:

  • 我尝试了另一个适用于 android 的应用程序(api 测试器),但在尝试与我的 API 通信时遇到了同样的错误。 (但同样,我的 ssl 证书似乎没问题)。
  • 在我的移动应用程序中,我绑定(bind)了从互联网上随机开放的 API 获取数据的功能,并且没有问题。
  • 我也尝试使用 fetch 而不是 axios 但也无法连接。
  • 我也在研究如何做一个 ssl 证书 pinning 作为临时解决方案,但问题是我正在使用 expo,但我没有找到用它来做的方法。<

一些相关的依赖版本是:

"dependencies": {
    ...
    "axios": "^1.1.3",
    "expo": "^44.0.0",
    "expo-cli": "^5.4.3",
    "react": "17.0.1",
    "react-native": "0.64.3",
    "react-native-gesture-handler": "~2.1.0",
    ...
  },

在服务器中:

  • 我尝试使用 ZeroSSL 颁发的证书,但仍然遇到同样的问题。
  • 我还尝试将证书颁发者添加到 android 中的“受信任的凭据”中,但该颁发者已经在其中。
  • 我还尝试使用带有标志 --preferred-chain="ISRG Root X1"
  • certbot 更新证书

鉴于所有这些测试,它似乎是一个服务器端问题,但没有其他设备有问题,只有 android;我还测试了证书并且它可以

我也用这个网站测试证书 https://www.ssllabs.com/sstest

结果是这样

SSL Test

如果您能提供给我任何线索,我将不胜感激。

问候!

最佳答案

我设法使应用程序成功连接到我的 API,但我仍在研究问题的根源。

更多上下文:

  • 我的移动应用程序是由 React Native + Expo 制作的。
  • 我为 iOS 编译了一个版本,为 Android 编译了另一个版本。
  • 这个问题只是突然发生在 Android 上 (在所有未对移动应用程序或服务器进行任何更改的安卓设备中)
  • iOS 可以毫无问题地连接 API
  • 该网站可以毫无问题地与 API 通信

这似乎是库axios(特别是axiosinstance)的问题。 这很奇怪,因为我没有更改 android 应用程序中的任何内容,它只是突然停止工作。 (同时在所有 Android 设备中)。

只是在做测试时,我意识到 axiosinstance 通过执行请求失败(除了我已经向您展示的异常(exception)),但是如果第一个请求指向我的 API,我会以一种莫名其妙的方式执行在应用程序中是通过使用 axios 它完美地工作,然后 axiosinstance 能够毫无错误地执行对我的 API 的任何请求。

我知道这听起来很奇怪,但现在我的应用又能正常工作了。

另一方面,只是想让你知道,我还测试了一个名为 API Tester v5.6 的 android 应用程序,它无法连接到我的 API,给我同样的异常,但它是最新版本 API Tester 5.7(几天前刚刚发布)可以正常工作。

我还尝试使用 ApiClient v2.4.7 连接到我的 API,但失败并出现相同的异常。

同样,我不明白真正的问题是什么,但绝对不是证书。

无论如何,现在你知道了,也许我应该把这个问题发给 axios 的人?

问候!

关于android - react native java.security.cert.CertPathValidatorException : Trust anchor for certification path not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74509259/

相关文章:

ios - 如何更改Tabbar中图标的颜色? ( react native 导航)

javascript - Nginx 将静态文件重定向到 root 的子目录

django - linux用户权限的最佳实践以如下方式运行Web应用程序?

android - 访问 AD 认证网站时出现 WebView 超时问题

android - 使用Firebase设置群聊的阅读状态

javascript - 在 Axios 创建函数中添加附加 header

reactjs - 路由器状态未通过 redux 保留在 React-Native 中

ruby-on-rails - 在 Intranet/LAN 上部署 Production Rails 应用程序

android - Android 4.4 KitKat 模拟器未启动

android - 在 android 中更新到 API 26 时 list 合并失败并出现多个错误