0

我正在编写 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())

你能帮我修一下吗?我不知道我做错了什么。

4

0 回答 0