我正在使用android nv-websocket-client库(2.0和1.31版本),我正在尝试打开wss:
连接;但是,连接失败并显示503 Service not available
错误消息。
经过调查,我发现HAProxy要求客户端使用SNI扩展,否则无论Host:
标头(我使用HAProxy作为负载均衡器)都会返回此类错误。
在进一步调查(使用tcpdump / wireshark)后,我发现客户端没有发送SNI,返回了错误的证书(针对不同的域),但客户端继续使用TLS连接并实际发送HTTP请求(如如果没有进行证书检查?)。
我的代码基本上是:
ws = new WebSocketFactory().createSocket(wsurl);
ws.addHeader("Authorization", "Bearer " + Config.getToken());
ws.addListener(this);
ws.connectAsynchronously();
我找不到设置SSLSocketFactory
的简便方法,但在我看来nv-websocket-client
中的代码只使用SSLSocketFactory.getDefault()
,这应该是正确的? SSLCertificateSocketFactory
似乎已被弃用,赞成采用这种方法。
我是否遗漏了一些关于SSL设置的关键部分,这是Android和Android的错误还是这个以及Android'功能'?