2

私は自分のウェブサイトで 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

安全な WebSocket を機能させるにはどうすればよいですか?

4

2 に答える 2

1

SSL ターミネーションにHAProxy 1.5+を使用しています。これは、本番環境からの構成の一部です。

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で暗号化されていないトラフィックをリッスンします。

于 2015-06-26T10:26:03.147 に答える