【问题标题】:Request to https server with self-signed certificate fails in React-Native android在 React-Native android 中使用自签名证书请求 https 服务器失败
【发布时间】:2021-03-01 14:25:41
【问题描述】:

首先我不得不说我对 react-native 和一般的 android 开发还很陌生(尽管对 react 和 js 很流利)。

我有一个通过 https 提供服务的 API 服务器(用 express 编写)。由于该系统将在内部使用(它是我们公司的内部服务),我正在使用我自己的 CA 和一组自签名证书用于它的所有部分(整个系统由多个相互通信的服务器组成并提供不同的东西)。每件事都运行良好。除了android部分!

我有一个 android 应用程序(react-native),它应该向其中一台服务器(具有全局静态 IP 的服务器)发送一些内容。

首先我尝试做我通常会在 js 中做的事情。我用fetch。但它失败并出现错误:

[TypeError: Network request failed]

我怀疑 HTTPS 和整个自签名证书的情况可能是罪魁祸首,所以我用一个普通的 HTTP 端点对其进行了测试,它确实有效。

我想也许我需要在手机上安装我的 CA,我做到了。但无济于事。

经过一番搜索,我偶然发现了一些关于 android 的新变化,它默认不信任用户安装的 CA,他们建议添加

android:networkSecurityConfig="@xml/network_security_config"

到清单文件,这个:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

res/xml 目录中。

我做了所有这些,但没有用。

所以我被困住了,任何帮助将不胜感激。

P.S:我不懂 Java,但是如果您有涉及一些本机代码的解决方案,如果您提供广泛的解释,我可以管理它:D

【问题讨论】:

    标签: android react-native https self-signed


    【解决方案1】:

    我使用react-native-ssl-pinning

    链接:https://github.com/MaxToyberman/react-native-ssl-pinning

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    猜你喜欢
    • 2016-07-17
    • 2014-08-08
    • 1970-01-01
    • 2019-12-25
    • 2012-02-17
    • 2020-10-08
    • 2016-05-14
    • 2015-09-23
    • 2021-11-10
    相关资源
    最近更新 更多