Создание SSLContext с сертификатом сервера и клиента и секретным ключом - PullRequest
0 голосов
/ 03 сентября 2018

Я пишу приложение для Android. Он подключается к серверу через TLS. Я получил от автора сервера 3 файла для использования (для проверки связи будут сгенерированы более поздние ключи): - сертификат сервера (cacrt.crt) - сертификат клиента (clientcrt.crt) - закрытый ключ клиента (clientkey.key)

Я пытаюсь создать SSLContext с этими ключами, но у меня есть некоторые проблемы. Я не смог загрузить их в формате файлов .crt и .key, поэтому я преобразовал их в формат BKS (client.bks для клиента и server.bks для ключа сервера). Но я получаю исключение при создании KeyStore KeyStoreException: KeyStore was not initialized.

Вот мой код:

val clientCrt = CertificateFactory.getInstance("X.509").generateCertificate(resources.openRawResource(R.raw.clientcrt))
val keyManagerFactory = KeyManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())
val keyStore = KeyStore.getInstance("BKS")
val keyInputClient = resources.openRawResource(R.raw.client)
keyStore.load(keyInputClient, "123456".toCharArray())
keyStore.setCertificateEntry("ca", clientCrt)
keyInputClient.close()
keyManagerFactory.init(keyStore, "123456".toCharArray())

val inputStream2 = 
val serverCrt = CertificateFactory.getInstance("X.509").generateCertificate(resources.openRawResource(R.raw.cacrt))
val keyStore2 = KeyStore.getInstance("BKS")
val keyInputServer = resources.openRawResource(R.raw.server)
keyStore.load(keyInputServer, "123456".toCharArray())
keyStore2.setCertificateEntry("ca", serverCrt)     // <--- KeyStoreException: KeyStore was not initialized
keyInputServer.close()

val trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())
trustManagerFactory.init(keyStore2);

val sslContext = SSLContext.getInstance("TLS")
sslContext.init(keyManagerFactory.keyManagers, trustManagerFactory.trustManagers, SecureRandom())

Не могли бы вы помочь мне исправить это? Понятия не имею, что я делаю не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...