如何在React Native(Android)中启用Tls 1.1和1.2?

3

我正在开发一款适用于Android和iOS平台的应用程序,我的应用程序通过API获取数据。我注意到我的应用程序在某些Android版本中无法获取数据。我测试了Android 4.1、4.4和5.1版本,这些版本都无法获取数据。但是在Android 7上,可以正常获取数据,没有任何问题。

我在寻找解决方案时发现,使用minSdkVersion 16的Android版本默认未启用TLS 1.1和1.2。(从20 sdkVersion开始实施) 要启用它们,我需要用Java来实现。我只是在使用react-native工具进行开发三个月,我不是Java程序员。因此,我看到的东西并没有告诉我具体的操作步骤。有人能告诉我如何在react-native Android应用程序中启用TLS 1.1和TLS 1.2吗?我只看到一些提供添加代码的示例,他们没有解释或者告诉我具体的步骤。我还读到了一条评论,说通过启用TLS 1.1和1.2,该应用程序将无法上传到Play商店。


React Native 允许您编写本地组件。只需获取一些与 TLS 1.2 兼容的 Java 代码,并使用它创建 RN 组件即可。 - deathangel908
1
可以展示任何例子吗? - Lil-Rav El Génio
2个回答

4
在android的build.gradle文件中添加此库。
implementation 'com.google.android.gms:play-services-safetynet:+'

将以下代码添加到您的MainApplication.java文件中:

import android.content.Intent;
import com.google.android.gms.common.GoogleApiAvailability;
import com.google.android.gms.security.ProviderInstaller;
import com.google.android.gms.security.ProviderInstaller.ProviderInstallListener;

@Override
  public void onCreate() {
    super.onCreate();
    upgradeSecurityProvider();
    SoLoader.init(this, /* native exopackage */ false);
  }

  private void upgradeSecurityProvider() {
    ProviderInstaller.installIfNeededAsync(this, new ProviderInstallListener() {
      @Override
      public void onProviderInstalled() {

      }

      @Override
      public void onProviderInstallFailed(int errorCode, Intent recoveryIntent) {
//        GooglePlayServicesUtil.showErrorNotification(errorCode, MainApplication.this);
        GoogleApiAvailability.getInstance().showErrorNotification(MainApplication.this, errorCode);
      }
    });
  }

请发布您的导入。谢谢! - Phillip Holmes
我已经添加了导入,欢迎!@PhillipBrandonHolmes - sajad abbasi
太好了!谢谢你!非常友善。 - Phillip Holmes
我想指出一个重要的细节:设备(或模拟器)必须安装有Google Play商店,以便SSL层能够正确安装。如果是模拟器,我建议使用Genymotion和来自https://opengapps.org/的Playstore。 - petrosmm
iOS部分怎么样? - Piotr Badura
@PiotrBadura 我不知道。我是安卓专家。 - sajad abbasi

1

经过多次尝试,只有一种方法对我有效。实际上,您需要添加一个来自谷歌的Java安全包,以在旧版Android(<5.0)上启用TLSv1 / TLSv1.1 / TLSv1.2。这也将添加对TLSv1.3的支持,并增加apk大小,但我想我们必须接受这一点。

app/build.gradle中添加该包:

implementation 'org.conscrypt:conscrypt-android:2.1.0'

更新 MainApplication.java 以使用新的安全提供程序:

import java.security.Security;
import javax.net.ssl.SSLContext;
import org.conscrypt.OpenSSLProvider;
...

@Override
public void onCreate() {
super.onCreate();

Security.insertProviderAt(new org.conscrypt.OpenSSLProvider(), 1);

//...
} 

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