我的 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
结果是这样
如果您能提供给我任何线索,我将不胜感激。
问候!
最佳答案
我设法使应用程序成功连接到我的 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/