SSL连接正在关闭

SSL连接正在关闭,ssl,netty,Ssl,Netty,我已经解决了这个问题。您需要创建一个SSLEngine实例,并将其添加到每个client请求的处理程序管道中。为此,我在channelConnected事件中添加了处理程序,并在channeldisconnected事件中删除了ssl处理程序。这确保每个连接的通道都将添加新通道 下面是处理程序的代码。这是使用SSL支持进行持久套接字连接的正确方法吗 package server; import static org.jboss.netty.buffer.ChannelBuffers.dynami

我已经解决了这个问题。您需要创建一个SSLEngine实例,并将其添加到每个client请求的处理程序管道中。为此,我在channelConnected事件中添加了处理程序,并在channeldisconnected事件中删除了ssl处理程序。这确保每个连接的通道都将添加新通道

下面是处理程序的代码。这是使用SSL支持进行持久套接字连接的正确方法吗

package server;
import static org.jboss.netty.buffer.ChannelBuffers.dynamicBuffer;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelFutureListener;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
import org.jboss.netty.channel.group.ChannelGroup;
import org.jboss.netty.channel.group.DefaultChannelGroup;
import org.jboss.netty.handler.ssl.SslHandler;
import ssl.SslContextFactory;
import ssl.SslKeyStore;

public class ServerHandler extends SimpleChannelHandler {
  private static final String ECHORES   = "0057081082200000000000000400000000000000070612201399966400301";
  @Override
  public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
System.out.println("Inside ServerHandler.messageReceived");
ChannelBuffer buffer = (ChannelBuffer) e.getMessage();
ChannelBuffer temp = dynamicBuffer();
temp.writeBytes(buffer);
if (temp.readableBytes() >= 4) {
   byte messageLen[] = new byte[4];
   temp.readBytes(messageLen);
   int len = Integer.parseInt(new String(messageLen));
   System.out.println("Length of the message is : " + len);
   if (temp.readableBytes() >= len) {
       byte[] message = new byte[len];
       temp.readBytes(message);
       System.out.println("Input message is : " + new String(message));
       Channel channel = e.getChannel();
       buffer = ChannelBuffers.copiedBuffer(ECHORES.getBytes());
       ChannelFuture future = channel.write(buffer);
       future.addListener(ChannelFutureListener.CLOSE);
   }
}
     }

  @Override
  public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
e.getCause().printStackTrace();
Channel channel = e.getChannel();
channel.close();
 }

 @Override
 public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
String file = "test.jks";
SSLContext sslCtx = SslContextFactory.getServerContext(new SslKeyStore(file));
final SSLEngine sslEngine =sslCtx.createSSLEngine();
sslEngine.setNeedClientAuth(false);
sslEngine.setUseClientMode(false);
final SslHandler sslHandler = new SslHandler(sslEngine);
ctx.getPipeline().addFirst("ssl", sslHandler);
ChannelFuture handshakeFuture = sslHandler.handshake();
handshakeFuture.addListener(new ChannelFutureListener() {

    @Override
    public void operationComplete(ChannelFuture future) throws Exception {
       if (future.isSuccess()) {
         System.out.println("SSL/TLS session established");
         System.out.println("Your session is protected by "+ sslHandler.getEngine().    
                         getSession().getCipherSuite() + " cipher suite.\n");
       } else {
           future.getChannel().close();
       }
    }
});
    }

    @Override
    public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
System.out.println("Inside ServerHandler.channelDisconnected");
ctx.getPipeline().remove("ssl");
    }
}
在将netty与ssl一起使用时,我遇到以下异常。我的第一次交易和握手很顺利。如果我再次向服务器发送新消息,我将收到此异常

“javax.net.ssl.SSLException:SSLEngine正在关闭/关闭”

这里可能出了什么问题。如何保持ESatabled TLS/SSL会话?此错误发生在org.jboss.netty.handler.ssl.SslHandler.handshake(SslHandler.java:358)上

其目的是保持服务器通过持久的TLS套接字连接运行,以便客户端可以发送消息


-你的问题是什么?要么你已经“解决了问题”,要么你还没有。解决了问题,尝试获取专家建议,了解这是否是在netty中执行SSL的推荐方法。嗨,你解决了问题吗?。。。我正在使用netty和TLS/SSL进行连接。。在握手过程中,连接会断开。。