Передача сертификата в http запрос

Рейтинг: 0Ответов: 0Опубликовано: 19.06.2023

Есть сервер на котором авторизация происходит по сертификату, есть SDK которое мне выдаёт сертификат, приватный ключ и объект KeyStore,и мне надо скачать файл с этого сервера. Как мне передать сертификат в мой http запрос?

Я пытался это сделать следующим способом, но у меня вылетает исключение java.io.FileNotFoundException, хотя файл на сервере точно есть

  val keyStore = SDK.getKeyStore()
  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()
            }
        )

        if (keyStore != null) {
            val entry = keyStore.getEntry(CerberStore.OTHERAPPS_KEYSTORE_ALIAS, null)
            val privateKeyEntry = entry as KeyStore.PrivateKeyEntry
            var cert: X509Certificate? = null
            try {
                val aliases = keyStore.aliases()
                while (aliases.hasMoreElements()) {
                    val alias = aliases.nextElement()
                    cert = keyStore.getCertificate(alias) as X509Certificate
                }
            } catch (e: KeyStoreException) {
                e.printStackTrace()
            }

            val p12 = cert
            val pkClient = p12!!.publicKey
            val kmf = KeyManagerFactory.getInstance("X509")
            var test = pkClient.toString().toCharArray()
            print(test)
            try {

                kmf.init(keyStore, pkClient.toString().toCharArray())
            } catch (e: UnrecoverableKeyException ){
                e.printStackTrace()
            }
            val keyManagers = kmf.keyManagers
            val sslContext = SSLContext.getInstance("TLS")!!

            sslContext.init(keyManagers, trustAllCerts, SecureRandom())
            HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.socketFactory)

            CookieHandler.setDefault(CookieManager())

            val urlConnection: HttpsURLConnection

            val hostnameVerifier = HostnameVerifier { _: String?, _: SSLSession? -> true }

            val requestedUrl = URL(url)
            urlConnection = requestedUrl.openConnection() as HttpsURLConnection
            urlConnection.sslSocketFactory = sslContext.socketFactory

            urlConnection.doOutput = true
            urlConnection.requestMethod = "GET"
            urlConnection.connectTimeout = 60000
            urlConnection.readTimeout = 60000
            urlConnection.hostnameVerifier = hostnameVerifier

            urlConnection.connect()
            val inputStream = urlConnection.inputStream

Ответы

Ответов пока нет.