【发布时间】:2020-08-13 09:35:17
【问题描述】:
我有一个在 Tomcat 中运行的 java 应用程序。我在端口 8443 上添加了 https 监听器,如下所述:
https://docs.spring.io/spring-boot/docs/2.2.x/reference/pdf/spring-boot-reference.pdf(9.3.13. 使用 Tomcat 启用多个连接器)
我另外配置了侦听器以挑战客户端提供证书(2-way-TLS / 双向 TLS)并拥有一个包含受信任条目的信任库。所有这些都有效,我可以在日志中看到整个 TLS-Handshake,以及提供的客户端证书。
我有一个 WebSocket 服务器端点 (@javax.websocket.server.ServerEndpoint),在建立安全 tls 隧道后,当客户端通过“wss://.....”连接时,它会被调用,@OnOpen 方法被调用它有 javax.websocket.Session 对象。所以 http(s) 升级到 ws 工作正常。
我的问题: 执行 TLS 握手后(由 WSS 触发:在我的情况下是 ws over https),我需要提取客户端证书 (X509) 信息(主题/发行人等)并在 @OnOpen 方法中提供它。我正在寻找一些拦截器或其他方式来访问和提取证书数据并使其可用在升级到 ws 完成。有没有办法从@OnOpen web socket 处理方法访问HttpServletRequest?感谢您的帮助。
【问题讨论】: