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