當前為5.1版本文檔,更多實例內容將在最新幫助文檔中展現,點選跳轉至 最新版幫助文檔

HTTPS配置WebSocket

1. 概述

1.1 問題描述

HTTP 是超正文傳輸協定,資訊是明文傳輸的。HTTPS 協定是由 SSL+HTTP 協定建構的可進行加密傳輸、身分認證的網路協定,比 HTTP 協定安全。

可以透過兩種方法在 HTTPS 環境中配置 WebSocket,下面將詳細介紹。

1.2 解決思路

方法一:如果沒用 Nginx,可以直接在 Web 伺服器上配置 SSL。

方法二:如果用了 Nginx 反向代理伺服器,那麼可以在 Nginx 上配置 SSL,而應用伺服器如 Tomcat 不配置 SSL。這樣用戶端和 Nginx 之間走 https 通訊,Nginx 和 Tomcat 之間透過 proxy_pass 走 http 通訊。

注1:JAR 包時間在 2019-12-05 之後的工程,支援在數據決策系統中,透過視覺化介面設定 WebSocket 。詳情請參見:標準 第三章

注2:11.0.2 及之後版本,新增一個容器 websocket 方案,幫助使用者實現快速配置 websocket 埠。

       若「管理系統>系統管理>標準」頁面不顯示 HTTPS 設定項,說明此方案生效,Websocket 連結已正確配置,無需其他任何手動配置。

30.png

2. 方法一:未配置代理

以 Windows 系統下使用方法一配置 WebSocket 為例。

2.1 搭建 HTTPS 環境

搭建 HTTPS 環境的詳細內容參見:配置SSL憑證實現HTTPS存取

2.2 配置資料庫

在 FineDB 的 fine_conf_entity 表中新增以下 4 個參數項,參數資訊如下表所示:

參數項參數值  
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的值必須是絕對路徑,不可以是相對路徑。

27.png

資料庫表中新增資訊如下圖所示:

1.png

配置完成之後,重啓報表伺服器即可生效。

注:Https 配置 WebSocket 後,Http下 WebSocket 會請求不到。

3. 方法二:配置了代理

以 Linux+Nginx+Tomcat 下使用方法二配置 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

生成鍵檔案時會要求設定密碼,設定好密碼後需要記住這個密碼。

1.png

這樣就生成了 server.key 檔案。此後用到了該檔案會經常要求輸入密碼。如 Nginx 載入了該 server.key,啟動時會要求輸入密碼。

image2019-1-4_14-42-36.png

如果嫌麻煩,可以用以下命令生成 server.key,這樣就不再需要輸入密碼。

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

3)生成伺服器憑證的申請檔案 server.csr。

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

image2019-1-4_15-4-42.png

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 需要的憑證檔案。

image2019-1-4_15-11-20.png

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協定的伺服器密碼將優先於用戶端密碼             #禁止在header中出現伺服器版本,防止黑客利用版本漏洞攻擊        #server_tokens off;        #如果是全站 HTTPS 並且不考慮 HTTP 的話,可以加入 HSTS 告訴瀏覽器本網站全站加密,並且強制用 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;            # 把 HTTPS 的協定告知容器(如tomcat),否則容器可能認為是 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       48889 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預設監聽48888埠,可自行修改。轉發埠是fine_conf_entity表中的參數項WebSocketConfig.requestPorts,且支援配置多個埠進行多次轉發,如下所示:

id

value

WebSocketConfig.port48888
WebSocketConfig.requestPorts48889

轉發埠可直接在前臺進行配置,可參考文檔:標準 第三章

注:2019-09-27 及之前版本的 JAR 包,轉發埠生效參數項是 WebSocketConfig.requestPort 且只支援一個埠。如下所示:

idvalue
WebSocketConfig.port48888
WebSocketConfig.requestPort48889

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 部分瀏覽器設定不生效

問題描述:

使用方法二進行配置後,火狐瀏覽器存取還是空白,IE 瀏覽器存取範本沒有記錄。

這是因為自簽章的憑證不被瀏覽器信任,頁面能存取是因為手動新增了例外,但是48888埠沒有,所以瀏覽器攔截了 Socket 請求。

解決方案:

F12看一下攔截的請求,複製下來,直接存取一下48888埠新增安全例外或者手動新增。

1552632213Ey2N4v2s.png
1552632230ReRczyKU.png

這樣瀏覽器就可以查看實時記憶體了,如下圖所示:

1552632336hewk50V0.png

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 可同時支援。

附件列表


主題: 管理员指南
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 评价文档,奖励 1 ~ 100 随机 F 豆!