【问题标题】:How to use secure websockets (wss)?如何使用安全的 websockets (wss)?
【发布时间】:2015-06-04 05:18:44
【问题描述】:

我在我的网站上使用 AutobahnJS 和 Thruway,使用非加密连接一切正常:

var connection = new autobahn.Connection({
                                             url: 'ws://www.example.com:9090',
                                             realm: 'restricted_realm'
                                         });

connection.onopen = function (session) {
    alert('yay');
};

connection.open();

但是,我无法使用安全连接。将 ws://www.mysite.com:9090 更改为 wss://www.example.com:9090 会导致控制台出现此错误:

与“wss://www.example.com:9090/”的 WebSocket 连接失败:连接建立错误:net::ERR_TIMED_OUT

我的服务器上有一个 SSL 证书,可以通过 https://www.example.com 访问我的网站。

我需要做什么才能使安全的 websockets 工作?

【问题讨论】:

    标签: apache ssl websocket autobahn thruway


    【解决方案1】:

    Thruway 使用Ratchet 作为 WebSockets 的底层传输,因此您可以参考他们的部署文档:

    http://socketo.me/docs/deploy

    您也可以使用 stunnel 或nginx

    【讨论】:

      【解决方案2】:

      我将HAProxy 1.5+ 用于SSL termination。这是我的生产配置的一部分。

      frontend public
          # HTTP
          bind :80
          # Redirect all HTTP traffic to HTTPS
          redirect scheme https if !{ ssl_fc }
      
          # HTTPS
          bind :443 ssl crt ssl.pem no-sslv3 ecdhe prime256v1 ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
          acl        is_websocket hdr(Upgrade) -i WebSocket
          use_backend    ws if is_websocket #is_websocket_server
          default_backend    www
      
      backend ws
          server    ws1    127.0.0.1:9090
      
      backend www
          timeout server  30s
          server  www1    127.0.0.1:8080
      

      在我的配置中,Apache 在端口 8080 上侦听 未加密 流量,而 WebSocket 服务器在端口 9090 上侦听 未加密 流量 em>

      【讨论】:

        猜你喜欢
        • 2018-04-06
        • 1970-01-01
        • 2021-04-19
        • 2019-08-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多