我有一个SSL证书有问题。我正在使用1.46的BouncyCastle,并且已经证明3.1的成功。和4.0我测试过的硬件。但它在2.3.5上失败。BouncyCastle版本和SSL证书验收
我已经检查了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();
}
我用它来生成脚本似乎导致好的信息,看起来像:
#!/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拥有的Android 2.3.5,并应容纳版本1.45的BouncyCastle。如果我使用1.45生成BC证书并将其部署在我的2.3.5 HW上,那么应该正确处理它并给我SSL连接。
我在这里错过了什么?
我已经检查过命令openssl s_client -tls1 -showcerts -connect:443和类似的ssl3,我得到一个两个证书链和一个err“verify error:num = 19:证书链中的自签名证书”这两种情况下,我想一个自签名证书。服务器与TLSv1和SSL3都配置在一起。 –
opaque
但我认为你的建议值得遵循,并做一些更多的挖掘。现在意识到我得到的错误是:捕获异常,同时startHandshake:javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:未找到证书路径的信任锚点。 返回SSL_NULL_WITH_NULL_NULL无效密码套件无效的会话。 – opaque
试了很多东西,都没有工作。我将服务器设置为SSLProtocol all -SSLv2和SSLCipherSuite ALL。仍然没有骰子。 openssl s_client命令返回TLS和SSL的证书,但有错误表明它们是自签名的。我试图按照链接页面中的信息所建议的方式强制使用SSLv3。我试图强制在应用程序中选择一些密码套件。没有工作。哦,我有checkServerTrusted()返回没有动作。在这种情况下有一个连接(花了很长时间)。它与力量SSLv3,有RC4-SHA密码。只有成功的时候。不安全。 – opaque