Meo*_*ode 6 ssl certificate netty
我使用双向SSL成功运行Netty(请参阅使用双向SSL保护设置Netty(客户端和服务器证书)).
但是,在我的一些处理程序中,我需要知道正在使用该应用程序的用户.我发现我无法弄清楚如何在我的处理程序中获取用户证书DN等信息.
我认为它可以在某个地方的ChannelHandlerContext中使用,但事实并非如此.有什么建议?
我知道SSLEngine可以在某个地方访问它,但我没有看到任何关于在SSLEngine公共API中获取访问权限的信息.我知道它在握手操作中有访问权限....但是我如何得到它?
ger*_*i-m 10
可以通过Pipline/ChannelHandlerContext获取SSLEngine
ChannelHandlerContext ctx = ...
SslHandler sslhandler = (SslHandler) ctx.channel().pipeline().get("ssl");
sslhandler.engine().getSession().getPeerCertificateChain()[0].getSubjectDN());
Run Code Online (Sandbox Code Playgroud)
这允许您获取处理程序对象中的证书.请注意,执行此操作时需要完成SSL握手.否则你会得到一个
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
Run Code Online (Sandbox Code Playgroud)
例外.为避免这种情况,您可以在处理程序中侦听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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4666 次 |
| 最近记录: |