Apache ProxyPass は Websocket の TLS も処理しますか?

Apache ProxyPass は Websocket の TLS も処理しますか?

私は proxypass を初めて使用します。これが私たちの設定だとしましょう:

<IfModule mod_ssl.c>
<VirtualHost *:443>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf


ServerName www.xzos.net
Include /etc/letsencrypt/options-ssl-apache.conf
ServerAlias xzos.net
SSLCertificateFile /etc/letsencrypt/live/www.xzos.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.xzos.net/privkey.pem

<LocationMatch "/ray/">
        ProxyPass ws://127.0.0.1:1080/ray/ upgrade=WebSocket
        ProxyAddHeaders Off
        ProxyPreserveHost On
        RequestHeader set Host %{HTTP_HOST}s
        RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s
</LocationMatch>
</VirtualHost>
</IfModule

これらをApacheに提供したので

SSLCertificateFile /etc/letsencrypt/live/www.xzos.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.xzos.net/privkey.pem

実行中の Websocket サーバーでws://127.0.0.1:1080/ray/もこれらを使用する必要はないはずですが、正しいでしょうか?

それを実行することはできますが、Apache がそれを処理します。これはローカル サーバーなので、特に 2 回実行するのは冗長だと思います。それを実行する場合は、Websocket サーバー内で同じ証明書キーを提供するws://127.0.0.1:1080/ray/必要があると思います。wss://127.0.0.1:1080/ray/

答え1

proxyPass を使用して localhost 上のセキュリティ保護されていないリスナーにプロキシすると、攻撃対象領域が露出する可能性があります。localhost 上のトラフィックを誰かがスニッフィングするのではないかと心配していますか? 適切なアクセス権を持つ悪意のある人物であれば、ポート 1080 のループバック インターフェイスで tcpdump を実行してトラフィックを読み取ることができます。wss:// を使用すると、これを行うのが難しくなります。技術的な理由がない限り、またはアプリケーションをデバッグしていてそのプロセス中に詳細情報を取得する必要がある場合以外は、両方のリンクで TLS を使用します。

答え2

私も意見を述べさせてください。

に注目してみましょう<LocationMatch "/ray/">。 パスが TLS 暗号化チャネルにカプセル化されている場合、Apache はどのようにしてパスを認識するのでしょうか/ray/? もちろん、Apache は TLS を処理して http ハンドシェイクを復号化し、 を確認してGET /whatever/、それが場所と一致するかどうかを判断する必要があります。

関連情報