我的React Native移动的应用程序突然无法与后端连接。(只有Android版本,iOS工作没有任何问题)。我也可以通过使用浏览器请求API没有问题。
这只是突然发生的,当问题开始时,在服务器端或移动的应用程序中没有任何变化,但所有Android应用程序停止连接到服务器。
移动的应用程序中的异常表示:java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
我回顾了堆栈溢出中的每一个答案,但到目前为止还没有一个有效的答案。以下是主要的几点:
- 我的移动的应用程序是用react-native和Expo制作的,SSL证书是由LetsEncrypt颁发的。
- 来自我的API的证书是正确的,它与iOS和任何网络浏览器完美配合。
- 后端是与
nginx 1.22.1
服务器一起运行的react-js
应用程序。
在移动的中:
- 我尝试了Android的另一个应用程序(API测试器),我在尝试与我的API通信时遇到了同样的错误。(但同样,我的SSL证书似乎还可以)。
- 在我的移动的应用程序中,我绑定到从互联网中的随机开放API获取数据,它的工作没有问题。
- 我还尝试使用
fetch
而不是axios
,但也无法连接。 - 我也看如何做一个ssl证书
pinning
作为一个临时的解决方案,但问题是,我正在使用博览会,我没有找到这样做的方法。
一些相关的依赖版本包括:
"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;我还测试了证书,它是OK
我也用这个网站测试证书https://www.ssllabs.com/sstest
这就是
SSL Test
如果你能给予我任何线索,我将感激不尽。
问候!
1条答案
按热度按时间nkcskrwz1#
我设法使应用程序与我的API成功连接,但我仍在研究问题的根源。
更多背景信息:
这似乎是一个库
axios
的问题(特别是axiosinstance
).它的奇怪,因为我没有改变任何东西在android应用程序,它只是突然停止工作.(在所有的android设备在同一时间).在测试中,我发现
axiosinstance
在执行请求时会失败(我已经向您展示了一个例外),但令人费解的是,如果我在应用程序中执行的指向我的API的第一个请求是通过使用axios
,它会完美地工作,在此之后,axiosinstance
能够执行对我的API的任何请求,而不会失败。我知道这听起来很奇怪,但现在我的应用程序又能用了。
另一方面,只是让你知道,我还测试了一个名为
API Tester v5.6
的Android应用程序,它无法连接到我的API给我同样的异常,但它的最后一个版本API Tester 5.7
(这是几天前发布的)工作没有问题。我还尝试用
ApiClient v2.4.7
连接到我的API,但失败了,出现了同样的异常。再说一次,我不明白真实的的问题是什么,但肯定不是证书。
不管怎样,现在你知道了,也许我应该把这个问题发布给axios的家伙们?
问候!