2012-09-06 127 views
0

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

我在這裏錯過了什麼?

回答

0

SSLPeerUnverifiedException不是證書驗證問題,這是服務器未發送證書的問題。我懷疑這與BouncyCastle的版本有很大關係。

只要結果是有效的X.509,你生成你的證書的任何內容都不應該與這些有關。在這裏,您似乎正在導入現有的證書,將您在初始連接上獲得的服務器證書作爲參考。

你得到的例外很可能是由於選定的密碼套件和/或SSL/TLS版本的問題。 (你可以看看this question, including comments,雖然我不建議你應該降級到SSLv3)。

你可以嘗試不同的密碼套件和/或SSL/TLS版本,openssl s_client(的-ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3, -no_tls1例如-cipher選擇或組合,檢查文檔s_client)。其中一些可能是由於服務器配置不正確。

+0

我已經檢查過命令openssl s_client -tls1 -showcerts -connect :443和類似的ssl3,我得到一個兩個證書鏈和一個err「verify error:num = 19:證書鏈中的自簽名證書」這兩種情況下,我想一個自簽名證書。服務器與TLSv1和SSL3都配置在一起。 – opaque

+0

但我認爲你的建議值得遵循,並做一些更多的挖掘。現在意識到我得到的錯誤是:捕獲異常,同時startHandshake:javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:未找到證書路徑的信任錨點。 返回SSL_NULL_WITH_NULL_NULL無效密碼套件無效的會話。 – opaque

+0

試了很多東西,都沒有工作。我將服務器設置爲SSLProtocol all -SSLv2和SSLCipherSuite ALL。仍然沒有骰子。 openssl s_client命令返回TLS和SSL的證書,但有錯誤表明它們是自簽名的。我試圖按照鏈接頁面中的信息所建議的方式強制使用SSLv3。我試圖強制在應用程序中選擇一些密碼套件。沒有工作。哦,我有checkServerTrusted()返回沒有動作。在這種情況下有一個連接(花了很長時間)。它與力量SSLv3,有RC4-SHA密碼。只有成功的時候。不安全。 – opaque