我正在尝试为tomcat websocket实施禁用主机名验证,但没有找到任何示例。
我已经能够禁用证书验证:
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
ClientEndpointConfig config = ClientEndpointConfig.Builder.create().build();
TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
.loadTrustMaterial(null, acceptingTrustStrategy)
.build();
config.getUserProperties().put("org.apache.tomcat.websocket.SSL_CONTEXT", sslContext);
官方文件说:
对于安全服务器端点,默认情况下启用主机名验证。要绕过此验证(不推荐),必须通过org.apache.tomcat.websocket.SSL_CONTEXT用户属性提供自定义SSLContext。自定义SSLContext必须配置有扩展javax.net.ssl.X509ExtendedTrustManager的自定义TrustManager。然后,可以通过各个抽象方法的适当实现来控制所需的验证(或缺少验证)。
https://tomcat.apache.org/tomcat-8.5-doc/web-socket-howto.html
但是,只要我了解X509ExtendedTrustManager用于证书验证,而不是主机名验证。
有人可以帮我吗?