SSLEngine只是可以通过Pipline/ChannelHandlerContext
ChannelHandlerContext ctx = ...
SslHandler sslhandler = (SslHandler) ctx.channel().pipeline().get("ssl");
sslhandler.engine().getSession().getPeerCertificateChain()[0].getSubjectDN());
中获取这可以让你获得证书的处理程序对象。请注意,当你这样做时,SSL握手需要完成。否则您将获得一个
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
异常。为了避免这种情况,你可以听在处理程序userEvent(在我们的例子HandshakeCompletionEvent),这可能如下:
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) {
logger.info("userEventTriggered: {0}, Class: {1}", evt.toString(), evt.getClass());
if (evt instanceof HandshakeCompletionEvent) {
fetchCertificate(ctx);
}
}
这确实解决问题。谢谢! – CStepnitz 2012-03-20 19:50:32
玩!框架在其后台使用netty,我想要SSL客户端证书,我怎么能得到当前的SSLEngine? – 2012-06-23 21:14:00