Как использовать сертификат с сайта (сервера) с запросом Glide / OkHTTP? - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь получить изображения с сервера, используя библиотеку 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()
            }
        }
    }
    }
...