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

标签 java ssl websocket certificate java-websocket

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

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

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

最佳答案

显然在新版本中,从 session 中获取 SSLEngine 的可能性已经成为可能。这应该从版本 1.4.1 开始存在,目前是快照。

对于遇到这个问题的其他任何人,这是一个从所用 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();
    }
}

关于Java-WebSocket - 从服务器获取客户端证书进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58094079/

相关文章:

ssl - Windows Phone 8 信任 SSL 证书的问题

java - websocket 双向概念如何工作?

java - 无法捕获算术异常(不过捕获 IllegalArgumentException 没问题)

java - 子类调用父类的方法

java - java中的递归与意外的输出

ssl - 如何将 Firebase SSL 证书与单独的 DNS 提供商一起使用

java - 需要示例程序来抛出 InterruptedException

ssl - 如何找到我网站的 SSL 证书?

ios - 如何使用 SRWebsocket 检查网络套接字是否处于事件状态

python - 如何一次向 Tornado 套接字客户端广播消息?