2011-07-25 26 views
0

我使用Mina和SslFilter配置“需要客户端身份验证”。如何在使用Mina成功完成SSL握手后获得委托人?

一旦建立连接并完成握手,如何从服务器上IoHandler的子类获取连接另一端的对等体的证书(或主体)?

编辑:换句话说,一旦握手完成并调用IoHandler.sessionOpened(),如何获得IoSession和主体之间的关系。

回答

1

它看起来像你可以得到SSLSession使用SslFilter.getSslSession(...)。然后,使用SSLSession.getPeerCertificateChain()获取客户端证书链。实际的客户端证书在该阵列中的位置0处。

+0

看起来像解决方案。让我先试试,然后我会接受它。谢谢。 – Vincent

+0

当从IoHandler.sessionOpened()调用时,SslFilter.getSslSession()返回null。可能这个方法在套接字连接建立之后立即被调用。握手结束后我不知道如何收到通知。请问你能帮帮我吗? – Vincent

+1

我不确定。如果没有完全回答问题,不要觉得你需要接受答案。作为通过查看javadoc的猜测,我会尝试设置“USE_NOTIFICATION”属性并查找“SESSION_SECURED”消息。 – Bruno

0

您不直接与IoHandler一起工作,它使用您需要为SslFilter构造函数提供的SSLContext完成。如果您看一下echo server示例,您可以看到实际检查在DefaultTrustManagerFactory中完成。就我个人而言,我发现这个例子有点太复杂,如果我能找到更简单的东西,我会发布它。

+0

我已经编写了我自己的TrustManagerFactory,我在SSLContext中设置了它,通过它的构造函数将其提供给SslFilter。当有人连接时,我的TrustManager会被调用,这部分没有问题。我需要知道的是,一旦握手完成,如何获得IoSession与其他对等方的证书(或委托人)之间的关系。 – Vincent