升级

时间:2017-06-12 18:45:31

标签: websocket

读者的摘要版本: 第一次编写websocket客户端。 Java 1.8使用Eclipse。在我的工作场所内部网络上获取握手错误异常并且websocket日志信息告诉我:

< Session 1c61123c-aa5f-4e59-a49d-b5d3c77c0bbd [598 ms]: Received handshake response: 
< 426
< connection: Keep-Alive
< content-length: 29
< content-type: text/plain; charset=utf-8
< date: Mon, 12 Jun 2017 16:40:04 GMT
< server: nginx

    Exception in thread "main" java.lang.RuntimeException: javax.websocket.DeploymentException: Handshake error.
        at webSocketExample.WebsocketClientEndpoint.<init>(WebsocketClientEndpoint.java:60)

详细说明: 当我连接到我的内部工作网络并尝试建立websocket连接时,我最初连接但后来我发送TCP重置。如果我将代码丢弃在我的笔记本电脑上并通过不同的网络连接,例如我的家庭Comcast连接,则建立连接并从服务器接收初始数据响应。然后我拿起我的笔记本电脑并将其连接到我的内部工作网络,然后我回去解决握手错误。

我一直无法通过我的内部安全团队解决它,因为我们不在这里进行websocket开发,因此知识库有点缺乏。

我在从我的主程序调用此例程之前设置了我的代理。已经验证我已连接到服务器,但后来我发送了重置。这是我正在执行的代码:

    try {

        System.setProperty("javax.net.debug", "all");

        ClientManager client = ClientManager.createClient();

        final SSLContextConfigurator defaultConfig = new SSLContextConfigurator();

        defaultConfig.retrieve(System.getProperties());
        SSLEngineConfigurator sslEngine = new SSLEngineConfigurator(defaultConfig, true, false, false);

        client.getProperties().put(ClientProperties.SSL_ENGINE_CONFIGURATOR, sslEngine);
        client.getProperties().put(ClientProperties.LOG_HTTP_UPGRADE, true);

        client.connectToServer(new Endpoint() {
            @Override
            public void onOpen(Session session, EndpointConfig config) {
                session.addMessageHandler(new MessageHandler.Whole<String>() {
                    @Override
                    public void onMessage(String message) {
                        System.out.println(message);
                    }
                });
            }
        }, ClientEndpointConfig.Builder.create().build(),
                new URI("wss://api.sandbox.gemini.com/v1/marketdata/BTCUSD"));

    } catch (Exception e) {
        throw new RuntimeException(e);
    }

我已经阅读了我能找到但尚未提出的所有帖子/问题/答案。由于我们的安全性非常严格,我在网络上的个人能力有限,但如果我被问到问题,我可以与我的安全团队合作寻找答案。

我认为它必须是我的工作网络内部和代理可能但我无法解决它。此外,这是连接和错误报告的日志信息的最后一部分:

DECRYPTION后的填充明文:len = 170

0000: 48 54 54 50 2F 31 2E 31   20 34 32 36 20 55 70 67  HTTP/1.1 426 Upg
0010: 72 61 64 65 20 52 65 71   75 69 72 65 64 0D 0A 44  rade Required..D
0020: 61 74 65 3A 20 4D 6F 6E   2C 20 31 32 20 4A 75 6E  ate: Mon, 12 Jun
0030: 20 32 30 31 37 20 31 36   3A 35 30 3A 32 35 20 47   2017 16:50:25 G
0040: 4D 54 0D 0A 53 65 72 76   65 72 3A 20 6E 67 69 6E  MT..Server: ngin
0050: 78 0D 0A 43 6F 6E 6E 65   63 74 69 6F 6E 3A 20 4B  x..Connection: K
0060: 65 65 70 2D 41 6C 69 76   65 0D 0A 43 6F 6E 74 65  eep-Alive..Conte
0070: 6E 74 2D 54 79 70 65 3A   20 74 65 78 74 2F 70 6C  nt-Type: text/pl
0080: 61 69 6E 3B 20 63 68 61   72 73 65 74 3D 75 74 66  ain; charset=utf
0090: 2D 38 0D 0A 43 6F 6E 74   65 6E 74 2D 4C 65 6E 67  -8..Content-Leng
00A0: 74 68 3A 20 32 39 0D 0A   0D 0A                    th: 29....
[Raw read (bb)]: length = 58
0000: 17 03 03 00 35 EC 0F C3   40 0D 18 B4 7B 53 C6 2D  ....5...@....S.-
0010: F5 83 29 72 15 51 AC 31   8F 86 52 C9 3C 98 BB F8  ..)r.Q.1..R.<...
0020: 94 4A D7 3A 6E 17 8C 75   9E 58 25 0B AE B5 2F 13  .J.:n..u.X%.../.
0030: 8C 44 29 94 2F 4A 46 18   C9 1A                    .D)./JF...
Padded plaintext after DECRYPTION:  len = 29
0000: 55 70 67 72 61 64 65 20   74 6F 20 57 65 62 53 6F  Upgrade to WebSo
0010: 63 6B 65 74 20 72 65 71   75 69 72 65 64           cket required
> Session 6f920826-4b05-47bd-8cad-212038ff9fad [86 ms]: Sending handshake request:
> GET wss://api.sandbox.gemini.com/v1/marketdata/BTCUSD
> Connection: Upgrade
> Host: api.sandbox.gemini.com
> Origin: api.sandbox.gemini.com
> Sec-WebSocket-Key: nkgv7uk/bPSKBiOz5T/Bdg==
> Sec-WebSocket-Version: 13
> Upgrade: websocket

< Session 6f920826-4b05-47bd-8cad-212038ff9fad [600 ms]: Received handshake response: 
< 426
< connection: Keep-Alive
< content-length: 29
< content-type: text/plain; charset=utf-8
< date: Mon, 12 Jun 2017 16:50:25 GMT
< server: nginx

如果你走到这一步,谢谢......

从我的网络团队添加嗅探器信息: 您建立了一个连接Pkt 263,您将通过代理服务器,mcweb-a 170.137.249.117。然后你传输数据。重置在Pkt 280中发送。

enter image description here

1 个答案:

答案 0 :(得分:0)

如果有人碰到这个。问题是我的代理服务器出了问题。我们必须将特定端点添加为允许,因此它会跳过一些安全检查。