如何创建包含客户端证书链的BKS(BouncyCastle)格式的Java密钥库

我正在编写一个需要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.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


Cats萌萌
浏览 1214回答 3
3回答

米脂

不确定您是否解决了此问题,但这是我的解决方法,并且可以在Android上使用:使用openssl将客户端的证书(证书必须由服务器接受的CA签名)和私钥合并为PCKS12格式的密钥对:&nbsp;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格式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android
Java