在React-Native中,java.security.cert.CertPathValidatorException错误:在证书路径中找不到信任锚点。

7
我正在使用axios package进行post请求,打算在react-native中构建一个应用程序。然而,在react-native安卓应用程序中执行axios post请求时,我遇到了错误。这个错误的原因是SSL证书签名采用的是letsencrypt。
使用React-Native 0.47.2版本可以正常进行https请求,但是更新到React-Native 0.55.0版本后,就会出现证书错误。
这个证书在桌面和移动浏览器以及应用程序Web门户网站上都可以正常工作,但在安卓应用程序中无法正常工作。
版本: android: 8.0.0 React Native: 0.55.0
错误信息:
"java.security.cert.CertPathValidatorException: Trust anchor for certification path not found."
3个回答

3

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">10.0.2.2</domain><!-- Debug port -->
        <domain includeSubdomains="true">abc.online</domain>
        <trust-anchors>
            <certificates src="@raw/abc"/>
        </trust-anchors>
    </domain-config>
</network-security-config>

这对我很有效,10.0.2.2是模拟器与计算机本地主机通信的默认IP地址。如果您正在使用手机,则应为另一个IP地址。

在此输入图片描述


这对我有用。非常感谢。 - mandeepsinghn
我该如何获取 .cer 文件? - Pooja Rajendran C
1
@PoojaRajendranC - 从您的托管中导出SSL证书(通常通过控制面板),然后使用OpenSSL可执行文件(C:\ Program Files \ Git \ usr \ bin \ openssl.exe)将文件转换为.CER扩展名。 - Angelo
@明丽,你提到了一个子域名,并将其设置为模拟器(10.0.2.2)。这是什么意思?我的意思是对于生产版本呢?我们并不在单个模拟器上运行它。那么这具体意味着什么呢? - Irfan wani

0
我已经使用以下解决方案解决了这个问题。
从Android 9(Pie)开始,我们需要在AndroidManifast.xml中设置networkSecurityConfig。

<application android:networkSecurityConfig="@xml/network_security_config">

</application>

现在创建一个名为 network_security_config.xml 的新xml资源文件,放置在 value/xml 文件夹中。此配置适用于应用程序的基本配置或默认安全配置,并禁用所有明文流量。

<network-security-config>
  <domain-config cleartextTrafficPermitted="false">
    <domain includeSubdomains="true">172.16.33.1</domain>
  </domain-config>
</network-security-config>

欲了解更多信息,请查看以下链接

https://codelabs.developers.google.com/codelabs/android-network-security-config/#3

https://developer.android.com/training/articles/security-config

https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6


-1

该异常的含义是您使用的域名是stg服务器,这意味着它具有私有DNS。 解决方案1 在这种情况下,请向您的服务器管理员请求为您创建一个扩展名为.cert的证书文件。然后将其安装到您的设备上,然后将dns1和dns2添加到您的wifi中。

解决方案2 不要使用域名作为URL,而是使用服务器的IP地址。这也可能解决此问题。


该异常的意思是证书的签名者未被此客户端信任,与 DNS 完全无关。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接