我正在开发一个在Windows mobile PDA上运行的移动应用程序。这个应用程序是用Java语言编写的,为了运行它,我们使用了来自J9的IBM。该应用程序通过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上设置客户端身份验证吗?
发布于 2010-04-08 17:30:35
因此,我得到的最终答案是切换到不同的JVM。IBM提供的支持非常少,仅仅是试图让某人向我们出售他们的JVM的许可证是非常困难的。我猜他们只喜欢与大型组织打交道。
现在使用来自Skelmir的CEE-J,到目前为止,它更有前途。
发布于 2010-02-08 23:53:15
基本上,客户端不会发送证书。服务器无法对客户端进行身份验证:有时它不能接收证书,或者不是相同的CA_ROOT,等等,并且不能设置响应。根据消息'no_certificate‘,很容易想象客户端没有发送任何内容。检查您的文件(路径)或标签:您应该使用truststorePass而不是'trustStore',而不是'trustStorePassword‘
https://stackoverflow.com/questions/2221532
复制相似问题