Я пытаюсь получить изображения с сервера, используя библиотеку Glide в Android. Теперь, когда я сделал запрос, я получаю исключение SSL Handshake.
Я пытался с помощью метода UnsafeOkHttpClient доверять всем сертификатам, но он не работает и не является лучшей практикой. Итак, я загрузил сертификат с веб-сайта, с которого мне нужно загрузить изображения, и как я могу использовать его с моим закрытым ключом для доступа к данным с сервера?
@GlideModule
class MyGlideApp : AppGlideModule() {
override fun applyOptions(context: Context, builder: GlideBuilder) {
super.applyOptions(context, builder)
}
override fun registerComponents(@NonNull context: Context, @NonNull glide: Glide, @NonNull registry: Registry) {
unsafeOkHttpClient().let {
registry.replace(
GlideUrl::class.java,
InputStream::class.java,
OkHttpUrlLoader.Factory(it)
)
}
}
fun unsafeOkHttpClient(): OkHttpClient {
val unsafeTrustManager = createUnsafeTrustManager()
val sslContext = SSLContext.getInstance("SSL")
sslContext.init(null, arrayOf(unsafeTrustManager), SecureRandom())
val sslSocketFactory = sslContext.socketFactory
val builder = OkHttpClient.Builder()
builder.sslSocketFactory(sslSocketFactory, unsafeTrustManager.acceptedIssuers[0] as X509TrustManager)
return OkHttpClient.Builder()
.sslSocketFactory(sslContext.socketFactory, unsafeTrustManager)
.hostnameVerifier { hostName, sslSession ->
true }
.build()
}
private fun createUnsafeTrustManager(): X509TrustManager {
return object : X509TrustManager {
@SuppressLint("TrustAllX509TrustManager")
override fun checkClientTrusted(chain: Array<out X509Certificate>?, authType: String?) {
}
@SuppressLint("TrustAllX509TrustManager")
override fun checkServerTrusted(chain: Array<out X509Certificate>?, authType: String?) {
}
override fun getAcceptedIssuers(): Array<out X509Certificate>? {
return arrayOf()
}
}
}
}