服务器客户端证书,使用服务器和客户端证书以及私钥创建SSLContext

在开发Android应用时,作者遇到了通过TLS连接服务器的问题。他们尝试使用服务器提供的.crt和.key文件,并将其转换为BKS格式。然而,初始化KeyStore时遇到了KeyStoreWasNotInitialized异常。代码中展示了尝试加载证书和密钥到KeyStore的过程,但似乎存在错误。寻求帮助以解决SSLContext初始化失败的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

keyInputServer.close()

val trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())

trustManagerFactory.init(keyStore2);

val sslContext = SSLContext.getInstance("TLS")

sslContext.init(keyManagerFactory.keyManagers, trustManagerFactory.trustManagers, SecureRandom())

您能帮我解决吗?我不知道我在做什么错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值