1

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

我已经为客户端和服务器生成了公钥/私钥,导出了他们的自签名证书并将它们导入到各自的密钥库中。最初,我尝试仅使用服务器端身份验证使其正常工作,并且成功。但我现在试图通过在 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 上设置客户端身份验证?

4

2 回答 2

0

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

现在使用来自 Skelmir 的 CEE-J,到目前为止它更有希望。

于 2010-04-08T09:30:34.580 回答
-1

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

于 2010-02-08T15:53:14.917 回答