我正在编写一个需要SSL客户端身份验证的Android应用.我知道如何为桌面Java应用程序创建JKS密钥库,但Android仅支持BKS格式.我试图创建密钥库的每一种方式都会导致以下错误:
handling exception: javax.net.ssl.SSLHandshakeException: null cert chain
所以看起来客户端永远不会发送正确的证书链,可能是因为我没有正确创建密钥库.我无法在桌面上启用SSL调试,因此这使得它比应该更加困难.
作为参考,以下是IS用于创建BKS 信任库的命令:
keytool -importcert -v -trustcacerts -file "cacert.pem" -alias ca -keystore "mySrvTruststore.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk16-145.jar" -storetype BKS -storepass testtest
这是我尝试过的命令,它无法创建BKS客户端密钥库:
cat clientkey.pem clientcert.pem cacert.pem > client.pem
keytool -import -v -file <(openssl x509 -in client.pem) -alias client -keystore "clientkeystore" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk16-145.jar" -storetype BKS -storepass testtest
Run Code Online (Sandbox Code Playgroud) 我在这一行收到错误:
final KeyStore keyStore = KeyStore.getInstance("BKS");
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
java.security.KeyStoreException: BKS not found
at java.security.KeyStore.getInstance(Unknown Source)
at AppListen.<init>(AppListen.java:84)
Run Code Online (Sandbox Code Playgroud)
我将bcprov-jdk16-146.jar添加到"Referenced Libraries"但仍然没有运气.
我的整体程序允许将Android手机用作使用SSL套接字连接的计算机的鼠标和键盘.Android应用程序具有相同的行,没有错误.
我究竟做错了什么?
也许这对大多数人来说都是常识,但不适合我,所以对于像我这样的人来说,这就是我所做的.
我使用BKS的原因是因为这是android允许的唯一格式,但我不知道你只需要在android端,你可以在服务器上使用另一种格式,然后制作密钥的副本并将其转换为BKS在android上使用,省去了BouncyCastle.
我使用了一个JKS密钥用于服务器,而不是将该密钥的副本转换为BKS,以便在android上使用名为portecle的程序.
我正在构建一个需要.bks密钥库进行身份验证的iPhone应用程序.我没有找到任何有关iOS应用程序的信息.
我想知道苹果是否允许在他们的应用程序中使用密钥库以及如何开始使用iOS.证书使用BouncyCastle创建.我找不到有关Android的信息,但对于iOS,我没有运气.任何帮助将不胜感激.