我使用Mina和SslFilter配置「需要客戶端身份驗證」。如何在使用Mina成功完成SSL握手後獲得委託人?
一旦建立連接並完成握手,如何從服務器上IoHandler的子類獲取連接另一端的對等體的證書(或主體)?
編輯:換句話說,一旦握手完成並調用IoHandler.sessionOpened(),如何獲得IoSession和主體之間的關係。
我使用Mina和SslFilter配置「需要客戶端身份驗證」。如何在使用Mina成功完成SSL握手後獲得委託人?
一旦建立連接並完成握手,如何從服務器上IoHandler的子類獲取連接另一端的對等體的證書(或主體)?
編輯:換句話說,一旦握手完成並調用IoHandler.sessionOpened(),如何獲得IoSession和主體之間的關係。
它看起來像你可以得到SSLSession
使用SslFilter.getSslSession(...)
。然後,使用SSLSession.getPeerCertificateChain()
獲取客戶端證書鏈。實際的客戶端證書在該陣列中的位置0處。
您不直接與IoHandler一起工作,它使用您需要爲SslFilter構造函數提供的SSLContext完成。如果您看一下echo server示例,您可以看到實際檢查在DefaultTrustManagerFactory中完成。就我個人而言,我發現這個例子有點太複雜,如果我能找到更簡單的東西,我會發布它。
我已經編寫了我自己的TrustManagerFactory,我在SSLContext中設置了它,通過它的構造函數將其提供給SslFilter。當有人連接時,我的TrustManager會被調用,這部分沒有問題。我需要知道的是,一旦握手完成,如何獲得IoSession與其他對等方的證書(或委託人)之間的關係。 – Vincent
看起來像解決方案。讓我先試試,然後我會接受它。謝謝。 – Vincent
當從IoHandler.sessionOpened()調用時,SslFilter.getSslSession()返回null。可能這個方法在套接字連接建立之後立即被調用。握手結束後我不知道如何收到通知。請問你能幫幫我嗎? – Vincent
我不確定。如果沒有完全回答問題,不要覺得你需要接受答案。作爲通過查看javadoc的猜測,我會嘗試設置「USE_NOTIFICATION」屬性並查找「SESSION_SECURED」消息。 – Bruno