HTTPS で Websocket を設定

  • 作成者:FRInternational
  • 編集回数:6次
  • 最終更新:FRInternational 于 2022-09-26
  • 一.概要

    1.1 問題の説明

    HTTP は Hypertext Transfer Protocol であり、情報はクリア テキストで送信されます。 HTTPSプロトコルは、SSL+HTTPプロトコルで構築された暗号化通信と本人認証が可能なネットワークプロトコルで、HTTPプロトコルよりも安全です。

    HTTPS 環境で WebSocket を構成するには 2 つの方法があり、以下で詳しく説明します。

    注: バージョン 11.0.2 以降のレポート プロジェクトには、コンテナー Websocket ソリューションが追加されています。 最初にプログラムが使用できるかどうかを確認することをお勧めします:コンテナー Websocket ソリューション

    ユーザー操作不要、手動設定不要、追加ポート開放不要 Webコンテナ付属のWebSocketを利用してシステムが自動で接続し、ポートはhttpポートを再利用します。

    1.2 ソリューション

    方法 1: Nginx を使用しない場合は、Web サーバーで直接 SSL を構成できます。

    方法 2: Nginx リバース プロキシ サーバーを使用する場合、Nginx で SSL を構成できますが、Tomcat などのアプリケーション サーバーは SSL を構成しません。 このように、クライアントと Nginx は https 通信、Nginx と Tomcat は proxy_pass 経由で http 通信を行います。

    注 1: データ決定システムのビジュアル インターフェイスを介して WebSocket を設定することがサポートされています。 詳細について:標準 第 3 章 。

    注2: 下図のHTTPS設定がデータ判定システムに表示されない場合は、Websocket接続が正しく設定されており、変更の必要がないことを意味します。

    2.方法 1: プロキシが未構成

    例として、方法 1 を使用して Windows システムで WebSocket を構成します。

    2.1 HTTPS 環境をセットアップ

    HTTPS 環境のセットアップの詳細については:HTTPS アクセス用の SSL 証明書の設定

    2.2 データベースを構成

    FineDBのfine_conf_entityテーブルに、以下の4つのパラメーター項目を追加します.パラメーター情報は、次の表に示されています、

    新しい手順については:ビルトイン HSQL データベース FineDB の帳票

    パラメータ項目パラメータ値
    WebSocketConfig.protocolssl(デフォルト)
    WebSocketConfig.keyStore%TOMCAT_HOME%\conf\server.xmlの keystoreFile フィールドの値
    WebSocketConfig.keyStorePassword%TOMCAT_HOME%\conf\server.xmlの keystorePass フィールドの値
    WebSocketConfig.keyStoreFormatJKS(デフォルト) 

    WebSocketConfig.keyStore・WebSocketConfig.keyStorePassword の構成を次の図に示します。

    注: fine_conf_entity テーブルの WebSocketConfig.keyStore の値は、相対パスではなく絶対パスである必要があります。

    データベース テーブルの新しい情報を次の図に示します。

    構成が完了したら、レポート サーバーを再起動して有効にします。

    注: Https が WebSocket を構成すると、Http での WebSocket 要求は使用できなくなります。

    3. 方法 2: プロキシを構成

    例として、Linux+Nginx+Tomcat で方法 2 を使用して WebSocket を構成します。

    注: 必要でない限り、自己署名証明書を使用しないでください. 自己署名証明書を使用すると、一部のレコードが失われる可能性があります. 詳細については、セクション 4.1 を参照してください.

    3.1 自己署名 SSL 証明書を生成

    注: 証明書を既にお持ちの場合は、この手順を省略できます。

    1)OpenSSL をインストールして確認

    # yum install openssl openssl-devel

    # openssl version -a

    2)鍵ファイル server.key を生成

    # openssl genrsa -des3 -out server.key 2048

    キーファイルを生成する際にパスワードの設定を求められますので、設定後はこのパスワードを覚えておく必要があります。

    これにより、server.key ファイルが生成されます。 このファイルを使用すると、パスワードが頻繁に要求されます。 Nginx が server.key をロードすると、起動時にパスワードを要求されます。

    ご不便な場合は、以下のコマンドで server.key を生成すると、パスワードを入力する必要がなくなります。

    # openssl rsa -in server.key -out server.key

    3) サーバー証明書用のアプリケーション ファイル server.csr を生成

    # openssl req -new -key server.key -out server.csr

    Country Name に CN を入力し、Common Nameにホスト名を入力します。そうでない場合、ブラウザーは安全ではないというメッセージを表示します。残りは空白のままにできます。

    4)CA 証明書 ca.crt を生成

    # openssl req -new -x509 -key server.key -out ca.crt -days 3650

    CA 証明書は、独自の証明書に署名するために使用されます。

    5)サーバー証明書 server.crt を生成

    # openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt

    6) 生成された 5 つのファイルを確認します。server.crt と server.key は、Nginx に必要な証明書ファイルです。

    3.2 NginxでHTTPSを構成

    HTTP のデフォルト ポートは 80 で、HTTPS のデフォルト ポートは 443 です。

    Nginx 構成フルバージョン:nginx-demo .conf

    注: nginx.conf を変更した後、Nginx を再起動するときに reload を使用しないでください。stop と start を使用してください。そうしないと、構成が有効にならない場合があります。

    1)ポート 443 を構成

    server {
            listen       443 ssl;
            server_name  192.168.5.232;
         
            ssl_certificate      /mnt/hgfs/share/keys/server.crt; #証明書の絶対パス
            ssl_certificate_key  /mnt/hgfs/share/keys/server.key; #keyの絶対パス
            ssl_session_cache    shared:SSL:1m; #SSL セッションを保存するためのキャッシュのタイプとサイズ 
            ssl_session_timeout  5m; #セッションの有効期限
     
            ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #安全な接続を確立するためにサーバーが許可する暗号形式のリスト
            ssl_prefer_server_ciphers  on; #SSLv3 および TLSv1 プロトコルに依存するサーバー暗号は、クライアント暗号よりも優先される
         
            #ハッカーがバージョンの脆弱性を悪用するのを防ぐために、ヘッダーにサーバーのバージョンが表示されないようにする
            #server_tokens off;
            #フルサイト HTTPS であり、HTTP を考慮しない場合は、HSTS を追加して、この Web サイトがサイト全体で暗号化されていることをブラウザーに伝え、
            HTTPS アクセスを強制することができる
            #fastcgi_param   HTTPS               on;
            #fastcgi_param   HTTP_SCHEME         https;
         
            location / {
                proxy_http_version 1.1;
                proxy_set_header Connection "";
     
                proxy_buffering off;
                proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header non_idempotent;
     
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                # コンテナー (Tomcat など) に HTTPS プロトコルを通知します。そうしないと、コンテナーはそれが HTTP 要求であると見なす可能性がある
                proxy_set_header X-Forwarded-Proto $scheme;
                 
                proxy_connect_timeout    20;
                proxy_read_timeout       1000;
                proxy_send_timeout       300;
     
                proxy_pass http://FR.com;
            }

    2)WebSocket ポートの構成

    WebSocketにHTTPSを設定すると問題が発生しやすいため、クラスタ起動後、スマート運用保守> メモリ管理 でリアルタイムメモリグラフが表示されるか確認できます。

    server { 
          listen       38889 ssl;            
          server_name  192.168.5.232;
     
          ssl_certificate      /mnt/hgfs/share/keys/server.crt;
          ssl_certificate_key  /mnt/hgfs/share/keys/server.key;
     
          ssl_session_cache    shared:SSL:1m;
          ssl_session_timeout  5m;
     
          ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
          ssl_prefer_server_ciphers  on;
          location / {
              proxy_request_buffering off;
              proxy_buffering off;
              proxy_connect_timeout 20;
              proxy_read_timeout 1000;
              proxy_send_timeout       300;
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection "upgrade";
              proxy_pass http://WBS.com;
           }
      }

    Nginx 転送はデフォルトでポート 38889 をリッスンし、ノードの WebSocket はデフォルトでポート 38888 をリッスンしますが、これは自分で変更できます。 転送ポートは、fine_conf_entity テーブルのパラメーター項目 WebSocketConfig.requestPorts であり、以下に示すように、複数の転送用に複数のポートの構成をサポートします。

    id

    value

    WebSocketConfig.port38888
    WebSocketConfig.requestPorts38889

    転送ポートはフォアグラウンドで直接構成できます。ドキュメントを参照してください:標準 第 3 章

    注: 2019-09-27 以前のバージョンの JAR パッケージの場合、転送ポートの有効なパラメーター アイテムは WebSocketConfig.requestPort であり、1 つのポートのみをサポートします。 次のように:

    idvalue
    WebSocketConfig.port38888
    WebSocketConfig.requestPort38889

    3)HTTP から HTTPS へ構成

    rewrite ^(.*)$  https://$server_name$1 permanent;

    4)Nginx クロスドメイン設定

    add_header access-control-allow-Headers X-Requested-With;
    add_header access-control-allow-Methods GET,POST,OPTIONS;

    注: Nginx クロスドメイン構成は、既に構成されている「add_header access-control-allow-Origin *;」のフロント エンドに追加することはできません。このフロントエンドは既に構成されているはずです。これを追加すると、フロントエンドがクロスドメイン構成を選択できなくなり、エラーが発生します。

    4. 注意事項

    4.1 一部のブラウザ設定が無効

    問題の説明:

    構成に方法 2 を使用した後も、Firefox ブラウザー アクセスは空白のままであり、IE ブラウザー アクセス テンプレートは記録されません。

    これは、自己署名証明書がブラウザーによって信頼されておらず、例外が手動で追加されているためページにアクセスできますが、ポート 38888 はアクセスできないため、ブラウザーが Socket 要求をインターセプトするためです。

    ソリューション

    F12を押し、傍受されたリクエストを見てコピーし、ポート 38888 に直接アクセスしてセキュリティ例外を追加するか、手動で追加します。

    このようにして、ブラウザは次の図に示すようにリアルタイム メモリを表示できます。

    4.2 その他

    1)キーパス:

    • Tomcat構成のserver.xmlで絶対パス/相対パスが利用できます。

    • データ決定システムの「システム管理 > 標準 > https 設定」の「SSL キーパス」は、絶対パスのみをサポートします。

    2)デザイナは HTTPS の構成をサポートしておらず、EXE でインストールされた BI は HTTPS の構成をサポートしていません。

    3)Nginx が https で構成されている場合は、[管理 > 一般> https] 設定で構成しないでください。

    4)Tomcat プロジェクトは https で構成されており、http と https の両方がプロジェクトにアクセスできます。 ただし、websocket は両方をサポートできず、https 接続は正常で、    http 接続は失敗します。

        Nginx プロジェクトには影響はなく、websocket は同時にサポートできます。

    Attachment List


    Theme: FineReport 管理ポータル
    既に最初
    既に最後
    • Helpful
    • Not helpful
    • Only read