Передача сертификата в http запрос
Есть сервер на котором авторизация происходит по сертификату, есть 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
Источник: Stack Overflow на русском