我对 SSL 证书有疑问。我正在使用 1.46 的 BouncyCastle,这已被证明对 3.1 是成功的。和我测试过的 4.0 硬件。但是它在 2.3.5 上失败了。
我检查了 android 文档,并注意到,虽然 BC 的 1.46 对于 3.1 和 4.04 是成功的,但 1.45 应该对 2.3.5 有效。
但事实并非如此。我尝试了下面的代码片段,其中 BKS 数据 mystore_gb 是使用 bcprov-jdk15-145.jar 生成的(我已经尝试了 jdk13-16 变体):
KeyStore trusted = KeyStore.getInstance("BKS");
InputStream in;
if (Build.VERSION.SDK_INT<11) {
in = context.getResources().openRawResource(R.raw.mystore_gb);
} else {
in = context.getResources().openRawResource(R.raw.mystore);
}
try {
trusted.load(in, PWD.toCharArray());
} finally {
in.close();
}
我用来生成的脚本似乎产生了 OK 信息,如下所示:
#!/bin/bash
echo | openssl s_client -connect $1:443 2>&1 | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > mycert.pem
export CLASSPATH=bcprov-jdk15-145.jar
CERTSTORE=res/raw/mystore_gb.bks
if [ -a $CERTSTORE ]; then
rm $CERTSTORE || exit 1
fi
keytool \
-importcert \
-v \
-trustcacerts \
-alias 0 \
-file mycert.pem \
-keystore $CERTSTORE \
-storetype BKS \
-provider org.bouncycastle.jce.provider.BouncyCastleProvider \
-providerpath ./ \
-storepass $2
那么为什么这不起作用呢?我明白了
09-06 21:51:36.397: D/ServerBase(26999): javax.net.ssl.SSLPeerUnverifiedException: 没有对等证书
我的目标硬件有 2.3.5 Android,并且应该还包含 1.45 版本的 BouncyCastle。如果我使用 1.45 生成 BC 证书并将其部署在我的 2.3.5 硬件上,那么应该正确处理它并为我提供 SSL 连接。
我在这里想念什么?