SSLPeerUnverifiedException:对等体未在Netty中进行身份验证,并在分离计算机上使用自签名证书

时间:2013-09-20 18:01:18

标签: java ssl netty

设置:

  • 我使用NetH(v4.0.8)客户端/服务器进行设置,使用SSLHandler来保护连接。
  • 在服务器上我在Jetty环境中运行Netty Part,客户端是我从命令行调用的JAR。
  • 我为客户端和服务器提供了自签名证书。
  • 我在双方使用的信任存储区(服务器和客户端)中拥有CA证书。我也有JRE KeyStore中的CA证书(以防万一)
  • 我有自己的信任存储实现来追查我的问题。

问题:

  • 如果客户端和服务器在同一台机器上运行,那么每件事情都可以。
  • 如果客户端和服务器在不同的计算机上运行,​​我首先在服务器上获得SSLPeerUnverifiedException(然后在客户端上)。
  • 我也有一个客户端的python实现(使用SSL连接)。这个可以在单独的机器上工作,也可以在不同的机器上工作。

到目前为止的分析显示

  • Trust-Manager正确调用客户端和服务器上的getAcceptedIssuers()
  • 在客户端
  • 上调用checkServerTrusted()
  • 未在服务器上调用checkClientTrusted()

相反,我确实得到了例外:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificateChain(SSLSessionImpl.java:401)

由于这需要一段时间在服务器上,因此在客户端发生超时

javax.net.ssl.SSLException: handshake timed out

然后是

SSLPeerUnverifiedException:  javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

发生。

异常发生在Handler-Class的netty的userEventTriggered()方法中。如果传入的事件是SslHandshakeCompletionEvent并且我尝试从SSLSession获取证书,我会检查。

1 个答案:

答案 0 :(得分:0)

基本问题是暂停。我仔细研究了SslHandshakeCompletionEvent,它提供了“isSuccess()”和“cause()”来追踪这个问题。圣道使我指出了imeout异常。

我通过增加netty Initialiser-Classes中SSLHandler的超时来修复此问题。