Skip to content

Android 4.4 and older devices fail to register to onesignal.com to due it's TLS1.2+ requirement #1465

@jkasten2

Description

@jkasten2

Description

Android 4.4 and older devices fail to connect to onesignal.com and print the following SSL error in the logcat:

2021-10-25 18:22:29.410 7613-7718/com.onesignal.sdktest W/OneSignal: OneSignalRestClient: null Error thrown from network stack. 
    javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x55870ae8: Failure in SSL library, usually a protocol error
    error:14077102:SSL routines:SSL23_GET_SERVER_HELLO:unsupported protocol (external/openssl/ssl/s23_clnt.c:714 0x52adcd5c:0x00000000)
        at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:448)
        at com.android.okhttp.Connection.upgradeToTls(Connection.java:146)
        at com.android.okhttp.Connection.connect(Connection.java:107)
        at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:294)
        at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
        at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
        at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
        at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
        at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503)
        at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136)
        at com.onesignal.OneSignalRestClient.startHTTPConnection(OneSignalRestClient.java:183)
        at com.onesignal.OneSignalRestClient.access$100(OneSignalRestClient.java:44)
        at com.onesignal.OneSignalRestClient$4.run(OneSignalRestClient.java:112)
        at java.lang.Thread.run(Thread.java:841)
     Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x55870ae8: Failure in SSL library, usually a protocol error
    error:14077102:SSL routines:SSL23_GET_SERVER_HELLO:unsupported protocol (external/openssl/ssl/s23_clnt.c:714 0x52adcd5c:0x00000000)
        at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
        at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:405)
        	... 13 more

(NOTE: This does not cause a crash, but the device does not register for push with OneSignal)

This is due to onesignal.com only supporting TLS 1.2 and newer.
https://www.ssllabs.com/ssltest/analyze.html?d=onesignal.com&s=104.18.225.52&latest
image

Solution

Enable TLS 1.2

TLS 1.2 is support by Android API 16+ (Android 4.1+) but is only enabled by default if the device is running Android API 20+ (devices with Android 5.0 or newer).

TLS 1.2 can be enabled on API 16+ (Android 4.1+) with code in the app in one of the following ways:

Environment

OneSignal-Android-SDK 4.6.1 running on an Android 4.4 device.

Steps to Reproduce Issue

  1. Start app on any Android 4.4 or older device
  2. Observer it never registers to onesignal.com and print SSL errors to onesignal.com in the logcat.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions