Java WebSocket-从服务器获取客户端证书以进行身份​​验证

时间:2019-09-25 08:17:23

标签: java ssl websocket certificate java-websocket

我已经使用Java-WebSocket和有效的双向TLS连接建立了一个Websocket连接。但是,为了使客户端身份验证成为可能,我希望能够获得客户端证书附带的信息。这将包含有关客户端连接的一些信息,因此有帮助。

我已经在调试模式下浏览了所有数据,以查看连接及其包含的数据,但是找不到对证书的任何引用。在线上的大多数问题似乎都是关于标准javax websocket的,但是我使用的是TooTallNate(https://github.com/TooTallNate/Java-WebSocket

提出的。

我希望能够从已建立的会话中获取证书。这可能吗?

1 个答案:

答案 0 :(得分:0)

显然,在新版本中,可以从会话中获取SSLEngine。从版本1.4.1(目前为SNAPSHOT)开始应该存在该版本。

对于任何遇到此问题的人,此解决方案从1.4.1-SNAPSHOT版本开始使用。此代码应在任何服务器事件中起作用。就我而言,我将其放置在onOpen事件中,我猜这也是您希望它出现的位置。我尚未使用非SSL服务器对此进行全面测试,但是由于已进行了检查,因此应该可以。但是,请事先进行测试。

Certificate[] certificates = null;
if(webSocket.hasSSLSupport()) {
    try {
        certificates = webSocket.getSSLSession().getPeerCertificates();
    } catch (SSLPeerUnverifiedException e) {
        logger.error("Could not read SSL Certificates");
        e.printStackTrace();
    }
}