我正在开发一个在 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 上设置客户端身份验证?