bumptech / glide

An image loading and caching library for Android focused on smooth scrolling
https://bumptech.github.io/glide/
Other
34.58k stars 6.12k forks source link

Glide does not load images from https url into Imageview on devices and emulators with android 8.1 and less #4563

Closed Eruoghene closed 3 years ago

Eruoghene commented 3 years ago

I implemented Glide this way on my android (java) project

build.gradle implementation 'com.github.bumptech.glide:glide:4.12.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'

image adapter class Glide.with(context) .load(url) .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) .centerCrop() .placeholder(R.drawable.featured_products1) .into(imgView);

But for devices with Android version 8.1 and version 5.0 (minimum version supported), the images fails to load with error below W/Glide: Load failed for https://beta.thelightinghaus.com/assets/upl/xvwgmgc2.jpg with size [403x263] class com.bumptech.glide.load.engine.GlideException: Failed to load resource There was 1 root cause: com.bumptech.glide.load.HttpException(Failed to connect or obtain data, status code: -1) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class java.io.InputStream, REMOTE There was 1 root cause: com.bumptech.glide.load.HttpException(Failed to connect or obtain data, status code: -1) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed There was 1 root cause: com.bumptech.glide.load.HttpException(Failed to connect or obtain data, status code: -1) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class com.bumptech.glide.load.HttpException: Failed to connect or obtain data, status code: -1 I/Glide: Root cause (1 of 1) com.bumptech.glide.load.HttpException: Failed to connect or obtain data, status code: -1 at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:98) at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:58) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393) Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:322) at com.android.okhttp.Connection.upgradeToTls(Connection.java:201) at com.android.okhttp.Connection.connect(Connection.java:155) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211) at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382) at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106) at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89) at com.android.okhttp.internal.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:25) at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:93) at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:58)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)  at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)  at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)  at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311)  at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280)  at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  at java.lang.Thread.run(Thread.java:818)  at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393)  Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:318) at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:219) at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:114) at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:550) at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:318) at com.android.okhttp.Connection.upgradeToTls(Connection.java:201)  at com.android.okhttp.Connection.connect(Connection.java:155)  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276)  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)  at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382)  at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106)  at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89)  at com.android.okhttp.internal.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:25)  at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:93)  at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:58)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)  at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)  at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)  at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311)  at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280)  at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  at java.lang.Thread.run(Thread.java:818)  at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393)  Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:318)  at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:219)  at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:114)  at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:550)  at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)  at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:318)  at com.android.okhttp.Connection.upgradeToTls(Connection.java:201)  at com.android.okhttp.Connection.connect(Connection.java:155)  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276)  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)  at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382)  at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106)  at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89)  at com.android.okhttp.internal.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:25)  at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:93)  at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:58)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)  at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)  at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)  at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311)  at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280)  at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  at java.lang.Thread.run(Thread.java:818)  at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393) 

However for Android version 9 and above, it loads the url and works perfectly.

Eruoghene commented 3 years ago

Experiences on devices and emulators are exactly the same.

While it loads well for devices and emulators with android version 9 and above, it fails to load with the error above for devices and emulators for android version 8.1 till 5.0

SMCXU commented 2 years ago

May be you can use network-security-config to reslove it just like this:

1311647502532_ pic_hd 1321647502565_ pic_hd

theAkito commented 2 years ago

@SMCXU

Enabling clear text traffic for the project is not any resolution... It's not worth the trade-off.

alex-ragin commented 2 years ago

Hey @Eruoghene, were you able to resolve the issue? We are facing this with some of the SSL certificates

Eruoghene commented 2 years ago

@alex-ragin , yes I was. What I discovered was this, for devices with android version 8.1 and below, the SSL provider was not installed on the phone by default as trusted certificate, SO i changed my SSL certificate to that provided by COMODO, installed it on the websites that hosts the images and it worked well on all.

alex-ragin commented 2 years ago

We are facing the same issue with images hosted on the Digital Ocean Spaces (Let's encrypt certificate) as well as Sectigo custom certificates. AWS S3 with their Amazon SSL works like a charm

Are you saying Comodo certificates worked fine on Android?

Thanks a lot!