如何在反应原生(安卓)中启用 TLS 1.1 和 1.2



嗯,我正在为安卓和IOS平台开发一个应用程序,在我的应用程序中,我正在从API中获取数据。我意识到我的应用程序无法在某些安卓版本中获取数据。我在 andoroid 4.1、4.4 和 5.1 中进行了测试。这些版本不会收集数据。但是Android 7,fetch和我没有问题。

正在寻找解决方案,我发现使用 minSdkVersion 16 的 androids 版本,默认情况下它们没有启用 TLS 1.1 和 1.2。(这是从 20 个 sdkVersion 实现的)为了启用它们,我将不得不与Java有关。3个月前,我只是在与react-native一起工作,我不是Java程序员。所以我在周围看到的东西,并没有告诉我我必须做什么。任何人都可以告诉我在反应原生安卓应用程序中启用TLS 1.1和TLS 2.2的步骤。我只看到提供要添加的代码的示例,它们没有解释或告诉步骤。我还阅读了一条评论,该评论说,通过启用TLS 1.1和1.2,该应用程序无法在Play商店中上传。

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);
      }
    });
  }

经过多次尝试解决它,只有一种方法对我有用。本质上,您需要从Google添加Java安全包,以便在旧的Android版本(<5.0)上启用TLSv1/TLSv1.1/TLSv1.2。这也将增加对 TLSv1.3 的支持以及增加 apk 大小,但我想我们将不得不忍受它。

app/build.gradle 中添加包:

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

更新主应用程序.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);
//...
} 

相关内容

  • 没有找到相关文章

最新更新