SSLEngine можно получить через Pipline / ChannelHandlerContext
ChannelHandlerContext ctx = ...
SslHandler sslhandler = (SslHandler) ctx.channel().pipeline().get("ssl");
sslhandler.engine().getSession().getPeerCertificateChain()[0].getSubjectDN());
Это позволяет вам получить сертификаты в объектах-обработчиках. Обратите внимание, что SSL-Handshake должен быть завершен, когда вы делаете это. В противном случае вы получите
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);
}
}