Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Netty客户端在需要相互身份验证的SSL握手期间不发送客户端证书_Ssl_Netty - Fatal编程技术网

Netty客户端在需要相互身份验证的SSL握手期间不发送客户端证书

Netty客户端在需要相互身份验证的SSL握手期间不发送客户端证书,ssl,netty,Ssl,Netty,我是Netty的新手,我尝试编写一个使用相互身份验证的echo服务器和客户端。不幸的是,它不工作,客户端不发送其客户端证书,服务器按预期断开连接。下面是我到目前为止所做的工作和客户端代码的概述,这些代码可能包含一些bug或者我遗漏了一些重要的东西。谢谢你经历了这一切 这就是我所拥有的: Netty版本4.1.0.CR1 服务器上下载的有效密钥库、信任库和CRL 直接使用JSSE的echo服务器和客户端的完整实现(按预期工作) 使用Netty的echo服务器的工作实现(与基于JSSE的客户机一起

我是Netty的新手,我尝试编写一个使用相互身份验证的echo服务器和客户端。不幸的是,它不工作,客户端不发送其客户端证书,服务器按预期断开连接。下面是我到目前为止所做的工作和客户端代码的概述,这些代码可能包含一些bug或者我遗漏了一些重要的东西。谢谢你经历了这一切

这就是我所拥有的:

  • Netty版本4.1.0.CR1
  • 服务器上下载的有效密钥库、信任库和CRL
  • 直接使用JSSE的echo服务器和客户端的完整实现(按预期工作)
  • 使用Netty的echo服务器的工作实现(与基于JSSE的客户机一起使用时,工作良好)
  • 基于Netty且不发送客户端证书的客户端
客户端代码:

通道处理程序:

package info.junius.tutorial.echo.netty.tls;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler.Sharable;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;

public class EchoClientHandler extends SimpleChannelInboundHandler<ByteBuf>
{
    @Override
    public void channelRead0(ChannelHandlerContext ctx, ByteBuf in)
    {
        System.out.println("CLIENT: Received echo from server:\n" + in.toString(CharsetUtil.UTF_8));
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)
    {
        cause.printStackTrace();
        ctx.close();
    }
}
VM参数:

-Djavax.net.debug=all -Djava.security.debug="certpath crl" -Dcom.sun.net.ssl.checkRevocation=true -Dcom.sun.security.enableCRLDP=true
我很有信心,我的错误一定是在Netty客户端代码中,因为当只使用JSSE时,系统运行良好。非常感谢您的帮助

干杯,
安迪

好的,我已经开始工作了。实际上是我的客户端代码出错了(代码基于Netty附带的安全聊天示例)。因此,我将其更改为echo示例中使用的版本:

EchoClientHandler:

@Override
public void channelActive(ChannelHandlerContext ctx)
{
    // When notified that the channel is active send a message.
    System.out.println("CLIENT: Sending request to server...");
    ctx.writeAndFlush(Unpooled.copiedBuffer("Mein Schnitzel ist kaputt!\n", CharsetUtil.UTF_8));
}   
而EchoClient:

try
{
    Bootstrap b = new Bootstrap();
    b.group(group).channel(NioSocketChannel.class).handler(channelInitializer);
    ChannelFuture f = b.connect(this.host, this.port).sync();
    f.channel().closeFuture().sync();
}
finally
{
    group.shutdownGracefully().sync();
}   

前面的代码只是过早地断开连接,因此握手从未完成

好的,我已经开始工作了。实际上是我的客户端代码出错了(代码基于Netty附带的安全聊天示例)。因此,我将其更改为echo示例中使用的版本:

EchoClientHandler:

@Override
public void channelActive(ChannelHandlerContext ctx)
{
    // When notified that the channel is active send a message.
    System.out.println("CLIENT: Sending request to server...");
    ctx.writeAndFlush(Unpooled.copiedBuffer("Mein Schnitzel ist kaputt!\n", CharsetUtil.UTF_8));
}   
而EchoClient:

try
{
    Bootstrap b = new Bootstrap();
    b.group(group).channel(NioSocketChannel.class).handler(channelInitializer);
    ChannelFuture f = b.connect(this.host, this.port).sync();
    f.channel().closeFuture().sync();
}
finally
{
    group.shutdownGracefully().sync();
}   
前面的代码只是过早地断开连接,因此握手从未完成

try
{
    Bootstrap b = new Bootstrap();
    b.group(group).channel(NioSocketChannel.class).handler(channelInitializer);
    ChannelFuture f = b.connect(this.host, this.port).sync();
    f.channel().closeFuture().sync();
}
finally
{
    group.shutdownGracefully().sync();
}