javax.net.ssl,https客户端和close_notify

时间:2013-02-20 09:34:03

标签: ssl https dhc

使用javax.net.ssl的https服务器的简单Netty实现,带有自签名证书。服务器已启动,然后使用DHC by Restlet发出请求。在服务器端,我得到:

  

io.netty.handler.ssl.SslHandler setHandshakeFailure   警告:由于关闭连接,SSLEngine.closeInbound()引发了异常。   javax.net.ssl.SSLException:在收到对等方的close_notify之前关闭入站:可能的截断攻击?       在sun.security.ssl.Alerts.getSSLException(未知来源)       at sun.security.ssl.SSLEngineImpl.fatal(Unknown Source)       at sun.security.ssl.SSLEngineImpl.fatal(Unknown Source)       at sun.security.ssl.SSLEngineImpl.closeInbound(Unknown Source)       at io.netty.handler.ssl.SslHandler.setHandshakeFailure(SslHandler.java:905)       at io.netty.handler.ssl.SslHandler.channelInactive(SslHandler.java:576)       at io.netty.channel.DefaultChannelHandlerContext.invokeChannelInactive(DefaultChannelHandlerContext.java:819)       at io.netty.channel.DefaultChannelHandlerContext.access $ 1300(DefaultChannelHandlerContext.java:38)       at io.netty.channel.DefaultChannelHandlerContext $ 5.run(DefaultChannelHandlerContext.java:808)       at io.netty.channel.SingleThreadEventExecutor.runAllTask​​s(SingleThreadEventExecutor.java:259)       在io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:305)       at io.netty.channel.SingleThreadEventExecutor $ 2.run(SingleThreadEventExecutor.java:110)       在java.lang.Thread.run(未知来源)

在客户端:

  

没有回应。证书有效吗?点击这里查看。

在Chrome的地址栏中发出相同的请求,即相同的服务器端异常。在Firefox的地址栏上发布相同的例外情况,同时Firefox正在显示关于证书不是来自可信CA的警告页面。 此异常似乎非常通用,并不直接指示协议的状态是什么。这是否意味着这三个客户端(Chrome,Firefox,DHC by Restlet)不能很好地播放协议,只是在服务器上消失而不是发送close_notify?或者这是SSL RFC要求的客户端行为,还是仅面向安全的客户端设计?

2 个答案:

答案 0 :(得分:5)

我已与DHC by Restlet小组联系,他们告诉我一个解决方法:

  

Chrome不提供用于管理证书的API。换句话说,我们没有API来自动接受您的证书,也没有办法如何提出“不受信任的证书”对话框。但是,您可以使用一些解决方法:

     
      
  1. 在另一个标签页中打开https网址。
  2.   
  3. 手动接受证书。
  4.   
  5. 返回DHC并且它会起作用,因为您的证书已被上一步手动接受(存储在您的Chrome中)。
  6.         

    通常你只需要做一次。

答案 1 :(得分:1)

当我在linux机器上安装打开JDK版本的Java时,我遇到了这个问题,当我将java版本更改为Oracle JDK时,问题就消失了。

抛出此异常的确切应用程序是Information Workbench(流体操作产品),java版本是8 在流动操作人员的系统预先确定中没有提到使用哪个版本的java。