我有一個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