2010-02-08 46 views
1

我正在開發一個在Windows Mobile PDA上運行的移動應用程序。該應用程序是用Java編寫的,爲了運行它,我們使用了IBM的J9 JVM。該應用程序通過HTTP與Apache Tomcat服務器進行通信,我們正在嘗試將其設置爲使用SSL。SSL HandShakeException:No_Certificate。使用IBM的J9 JVM和Apache Tomcat

我爲客戶端和服務器都生成了公鑰/私鑰,導出了自簽名證書並將它們導入到各自的密鑰庫中。最初,我試圖只使用服務器端身份驗證來實現它,並取得了成功。但我現在試圖通過在apache conf目錄的server.xml文件中設置clientAuth =「true」來獲得相互認證。

我已啓用服務器上的SSL日誌記錄,當客戶端連接服務器時報告SSLProtocolException:握手警報:no_certificate。客戶端日誌也顯示異常:

javax.net.ssl.SSLHandshakeException: unexpected_message 
    at com.ibm.j9.jsse.SSLSocketImpl.completeHandshake(Unknown Source) 
    at com.ibm.j9.jsse.SSLSocketImpl.startHandshake(Unknown Source) 
    at com.ibm.oti.net.www.protocol.https.HttpsURLConnection.openSocket(Unknown Source) 
    at com.ibm.oti.net.www.protocol.https.HttpsURLConnection.connect(Unknown Source) 
    at com.ibm.oti.net.www.protocol.https.HttpsURLConnection.sendRequest(Unknown Source) 
    at com.ibm.oti.net.www.protocol.https.HttpsURLConnection.doRequest(Unknown Source) 
    at com.ibm.oti.net.www.protocol.https.HttpsURLConnection.getInputStream(Unknown Source) 

客戶端密鑰庫和信任是通過設置下面的系統屬性配置:

javax.net.ssl.trustStore 
javax.net.ssl.trustStorePassword 
javax.net.ssl.keyStore 
javax.net.ssl.keyStorePassword 

沒有人有任何想法如何,我可以設置客戶端身份驗證的J9 JVM?

回答

0

所以最終的答案我來是要切換到不同的JVM 。 IBM提供的很少的支持,只是試圖讓某人向我們出售我們的JVM許可證,這證明是非常困難的。我猜他們只想處理龐大的組織。

現在使用Skelmir的CEE-J,到目前爲止,它的應用前景非常廣闊。

-1

基本上,客戶端沒有發送證書。 服務器無法對客戶端進行身份驗證:有時它不會收到證書,或者與CA_ROOT等不同,並且無法設置響應。通過消息'no_certificate'很容易想象客戶端沒有發送任何東西。 檢查文件(你的路),或者你的標籤,而不是「的trustStore」,你應該使用truststoreFile,而不是「trustStorePassword」,使用truststorePass

+1

路徑很好。信任庫與它無關,它包含服務器證書。密鑰庫更可能有錯,但我不認爲將其更改爲keystoreFile和keystorePass是有道理的。系統屬性被記錄爲keyStore和keyStorePassword。 – DaveJohnston 2010-02-08 17:31:56

+0

你是對的,這些參數在服務器屬性中。 您是否嘗試過使用Web瀏覽器並安裝證書,請檢查您是否可以建立SSL隧道? 我確定客戶端沒有提供正確的證書。 您使用PKCS12嗎? – juanp 2010-02-09 03:08:48