我正在编写一个需要SSL客户端身份验证的Android应用。我知道如何为桌面Java应用程序创建JKS密钥库,但是Android仅支持BKS格式。我尝试创建密钥库的每种方式都会导致以下错误:handling exception: javax.net.ssl.SSLHandshakeException: null cert chain这样看来,客户端永远不会发送正确的证书链,这可能是因为我没有正确创建密钥库。我无法像在台式机上那样启用SSL调试,因此这比应做的要困难得多。作为参考,以下是创建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.pemkeytool -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
3 回答
米脂
TA贡献1836条经验 获得超3个赞
不确定您是否解决了此问题,但这是我的解决方法,并且可以在Android上使用:
使用openssl将客户端的证书(证书必须由服务器接受的CA签名)和私钥合并为PCKS12格式的密钥对: openssl pkcs12 -export -in clientcert.pem -inkey clientkey.pem -out client.p12
您可能需要将JRE修补为最大强度加密,具体取决于您的密钥强度:从JCE 5.0无限强度管辖策略文件复制jar文件并覆盖JRE中的文件(例如C:\ Program Files \ Java \ jre6 \ lib \ security )
使用上述Portecle工具并以BKS格式创建新的密钥库
导入在步骤1中生成的PCKS12密钥对,并将其保存为BKS密钥库。此密钥库可用于Android客户端身份验证。
如果需要执行证书链,则可以使用此IBM工具:KeyMan将客户端的PCKS12密钥对与CA证书合并。但是它仅生成JKS密钥库,因此您再次需要Protecle将其转换为BKS格式。
添加回答
举报
0/150
提交
取消