SSLHandShakeException:无证书。使用IBM J9 JVM和Apache Tomcat

时间:2010-02-08 12:33:30

标签: java security tomcat ssl j9

我正在开发一个可在Windows Mobile PDA上运行的移动应用程序。该应用程序是用Java编写的,为了运行它,我们使用的是IBM的J9 JVM。应用程序通过HTTP与Apache Tomcat服务器通信,我们现在正尝试将其设置为使用SSL。

我为客户端和服务器生成了公钥/私钥,导出了自签名证书并将它们导入到各自的密钥库中。最初我试图只使用服务器端身份验证让它工作,这是成功的。但我现在尝试通过在apache conf目录的server.xml文件中设置clientAuth =“true”来获得相互身份验证。

我已在服务器上启用SSL日志记录,并且当客户端连接服务器时报告SSLProtocolException:handshake alert: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上设置客户端身份验证?

2 个答案:

答案 0 :(得分:0)

所以我得到的最终答案是切换到另一个JVM。 IBM提供的支持非常少,只是试图让某人向我们出售他们的JVM许可证,这非常困难。我猜他们只想与大型组织打交道。

现在使用Skelmir的CEE-J,到目前为止它更有前途。

答案 1 :(得分:-1)

基本上,客户端不发送证书。 服务器无法对客户端进行身份验证:有时它不接收证书,或者不是相同的CA_ROOT等,并且无法设置响应。通过消息'no_certificate'很容易想象客户端没有发送任何内容。 检查你的文件(你的路径)或你的标签:你应该使用truststoreFile代替'trustStore',而不是'trustStorePassword',使用truststorePass