From 51e5f7714b87e77400e06d0efe74d8c32008ec0f Mon Sep 17 00:00:00 2001 From: Marvin W Date: Sat, 25 May 2019 15:54:32 +0200 Subject: [PATCH] Correctly handle ProviderInstaller if it was not used before first network interaction --- .../security/ProviderInstallerImpl.java | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/play-services-core/src/main/java/com/google/android/gms/common/security/ProviderInstallerImpl.java b/play-services-core/src/main/java/com/google/android/gms/common/security/ProviderInstallerImpl.java index f3101adb..62647365 100644 --- a/play-services-core/src/main/java/com/google/android/gms/common/security/ProviderInstallerImpl.java +++ b/play-services-core/src/main/java/com/google/android/gms/common/security/ProviderInstallerImpl.java @@ -17,12 +17,41 @@ package com.google.android.gms.common.security; import android.content.Context; +import android.os.Process; import android.util.Log; + import org.conscrypt.OpenSSLProvider; +import org.microg.gms.common.PackageUtils; + import java.security.Security; +import java.util.Collections; +import java.util.List; + +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; public class ProviderInstallerImpl { + private static final String TAG = "GmsProviderInstaller"; + private static final List DISABLED = Collections.singletonList("com.discord"); + public static void insertProvider(Context context) { - Security.insertProviderAt(new OpenSSLProvider(), 1); + try { + String packageName = PackageUtils.packageFromProcessId(context, Process.myPid()); + Log.d(TAG, "Provider installer invoked for " + packageName); + if (DISABLED.contains(packageName)) { + Log.d(TAG, "Package is excluded from usage of provider installer"); + } else if (Security.insertProviderAt(new OpenSSLProvider("GmsCore_OpenSSL"), 1) == 1) { + Security.setProperty("ssl.SocketFactory.provider", "org.conscrypt.OpenSSLSocketFactoryImpl"); + Security.setProperty("ssl.ServerSocketFactory.provider", "org.conscrypt.OpenSSLServerSocketFactoryImpl"); + + SSLContext.setDefault(SSLContext.getInstance("Default")); + HttpsURLConnection.setDefaultSSLSocketFactory(SSLContext.getDefault().getSocketFactory()); + Log.d(TAG, "SSL provider installed"); + } else { + Log.w(TAG, "Did not insert the new SSL provider"); + } + } catch (Exception e) { + Log.w(TAG, e); + } } }