SSL 証明書に問題があります。私は BouncyCastle 1.46 を使用していますが、これは 3.1 で成功することが証明されています。私がテストした4.0 HW。ただし、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: ピア証明書がありません
私のターゲット HW は 2.3.5 Android で、ver 1.45 の BouncyCastle も収容する必要があります。1.45 を使用して BC 証明書を生成し、それを 2.3.5 HW に展開すると、適切に処理され、SSL 接続が提供されるはずです。
ここで何が欠けていますか?