【发布时间】:2011-05-03 04:44:01
【问题描述】:
我正在编写一个需要 SSL 客户端身份验证的 Android 应用。我知道如何为桌面 Java 应用程序创建 JKS 密钥库,但 Android 仅支持 BKS 格式。我尝试创建密钥库的每一种方式都会导致以下错误:handling exception: javax.net.ssl.SSLHandshakeException: null cert chain
所以看起来客户端从未发送正确的证书链,可能是因为我没有正确创建密钥库。我无法像在桌面上那样启用 SSL 调试,所以这比它应该做的要困难得多。
以下是用于创建 BKS truststore 的命令供参考: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 客户端 keystore 的命令:
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
【问题讨论】:
-
真的没有人使用过 BKS 格式吗?啊,为什么 Android 不能只使用标准的 JKS 格式,或者至少记录这种格式,因为这是他们支持的全部?这应该很简单...