使用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.runAllTasks(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要求的客户端行为,还是仅面向安全的客户端设计?
答案 0 :(得分:5)
我已与DHC by Restlet小组联系,他们告诉我一个解决方法:
Chrome不提供用于管理证书的API。换句话说,我们没有API来自动接受您的证书,也没有办法如何提出“不受信任的证书”对话框。但是,您可以使用一些解决方法:
- 在另一个标签页中打开https网址。
- 手动接受证书。
- 返回DHC并且它会起作用,因为您的证书已被上一步手动接受(存储在您的Chrome中)。
醇>通常你只需要做一次。
答案 1 :(得分:1)
当我在linux机器上安装打开JDK版本的Java时,我遇到了这个问题,当我将java版本更改为Oracle JDK时,问题就消失了。
抛出此异常的确切应用程序是Information Workbench(流体操作产品),java版本是8 在流动操作人员的系统预先确定中没有提到使用哪个版本的java。