Java-WebSocket - 从服务器获取客户端证书进行身份验证
Java-WebSocket - Get Client certificate from Server for authentication
我已经使用 Java-WebSocket 建立了一个 websocket 连接和一个有效的双向 TLS 连接。但是,为了使客户端身份验证成为可能,我希望能够获得附加到客户端证书的信息。这将包含有关客户端连接的一些信息,因此拥有它会很有用。
我在调试模式下查看了连接的所有数据及其包含的数据,但找不到对证书的任何引用。大多数在线问题似乎都是关于标准的 javax websocket,但我使用的是 TooTallNate (https://github.com/TooTallNate/Java-WebSocket)
我希望能够从已建立的会话中获取证书。这可能吗?
显然在新版本中可以从会话中获取 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();
}
}
我已经使用 Java-WebSocket 建立了一个 websocket 连接和一个有效的双向 TLS 连接。但是,为了使客户端身份验证成为可能,我希望能够获得附加到客户端证书的信息。这将包含有关客户端连接的一些信息,因此拥有它会很有用。
我在调试模式下查看了连接的所有数据及其包含的数据,但找不到对证书的任何引用。大多数在线问题似乎都是关于标准的 javax websocket,但我使用的是 TooTallNate (https://github.com/TooTallNate/Java-WebSocket)
我希望能够从已建立的会话中获取证书。这可能吗?
显然在新版本中可以从会话中获取 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();
}
}