Skip to content

Instantly share code, notes, and snippets.

The following code disables SSL certificate checking for any new instances of HttpsUrlConnection
/**
* Disables the SSL certificate checking for new instances of {@link HttpsURLConnection} This has been created to
* aid testing on a local box, not for use on production.
*/
private static void disableSSLCertificateChecking() {
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
// Not implemented
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
// Not implemented
}
} };
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
@kaushikipandey
Copy link

Great, thanks!

Where to copy paste this code??

@Omnomios
Copy link

Omnomios commented Feb 9, 2023

If you're here for NativeScript. You'll need to turn it into a Class, with the correct imports, then put the file in App_Resources/Android/src/main/

I have forked this Gist and ported it to be used in NativeScript. Better instructions are there.

https://gist.github.com/Omnomios/fa606e700c9405b5aa419d26661cb062

@castrintt
Copy link

this works for me, im using a bareworkflow react native expo

i create a file called IgnoreSSLFactory.kt in the same path as MainApplication.kt

package your package

import com.facebook.react.modules.network.OkHttpClientFactory
import com.facebook.react.modules.network.ReactCookieJarContainer
import okhttp3.OkHttpClient
import java.security.cert.X509Certificate
import java.util.concurrent.TimeUnit
import javax.net.ssl.*

class IgnoreSSLFactory : OkHttpClientFactory {

override fun createNewNetworkModuleClient(): OkHttpClient {
    return try {
        val trustAllCerts = arrayOf<TrustManager>(
            object : X509TrustManager {
                override fun checkClientTrusted(chain: Array<X509Certificate?>?, authType: String?) {}
                override fun checkServerTrusted(chain: Array<X509Certificate?>?, authType: String?) {}
                override fun getAcceptedIssuers(): Array<X509Certificate> = arrayOf()
            }
        )

        val sslContext = SSLContext.getInstance("SSL")
        sslContext.init(null, trustAllCerts, java.security.SecureRandom())

        val sslSocketFactory = sslContext.socketFactory

        val builder = OkHttpClient.Builder()
            .connectTimeout(0, TimeUnit.MILLISECONDS)
            .readTimeout(0, TimeUnit.MILLISECONDS)
            .writeTimeout(0, TimeUnit.MILLISECONDS)
            .cookieJar(ReactCookieJarContainer())

        builder.sslSocketFactory(sslSocketFactory, trustAllCerts[0] as X509TrustManager)
        builder.hostnameVerifier { _, _ -> true }

        builder.build()
    } catch (e: Exception) {
        throw RuntimeException(e)
    }
}

}

and then i use in MainApplication.kt

override fun onCreate() {
super.onCreate()
SoLoader.init(this, false)
OkHttpClientProvider.setOkHttpClientFactory(IgnoreSSLFactory()); // HERE

if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) {
  ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false
}
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
  // If you opted-in for the New Architecture, we load the native entry point for this app.
  load()
}
if (BuildConfig.DEBUG) {
  ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager)
}
ApplicationLifecycleDispatcher.onApplicationCreate(this)

}

then just run gradlew clean, and run your application

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment