java - SSL HandShakeException : No_Certificate. 使用 IBM 的 J9 JVM 和 Apache Tomcat

标签 java security tomcat ssl j9

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

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

客户端 keystore 和信任库通过设置以下系统属性进行配置:

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

有人知道如何在 J9 JVM 上设置客户端身份验证吗?

最佳答案

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

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

关于java - SSL HandShakeException : No_Certificate. 使用 IBM 的 J9 JVM 和 Apache Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2221532/

相关文章:

java - 如何通过parellel plesk更改tomcat中的默认JRE

java - 使用 JAXB 编码内部类 - Java

asp.net-mvc - 使用 ssl 运行 asp.net mvc 应用程序时安全连接失败

java - 使用反射替换 java.net.URL URLStreamHandlerFactory 是个好主意吗?

tomcat - WSO2 Stratos Live 服务器错误

java - java.util.Arrays$ArrayList 是什么意思?

java - 在 WebDriver 中使用稳健的 Try Catch 方法?

php - 什么密码强度被认为足以与 password_hash 函数一起使用?

security - 创建一个经过身份验证的用户可以访问但匿名用户不能访问的安全 Orchard CMS 页面

apache - Lucee - 服务器和 Web 管理页面有什么区别?