HTTP 是超正文傳輸協定,資訊是明文傳輸的。HTTPS 協定是由 SSL+HTTP 協定構建的可進行加密傳輸、身分認證的網路協定,比 HTTP 協定安全。
可以透過兩種方法在 HTTPS 環境中配置 WebSocket,下面將詳細介紹。
注:5.1.20 及之後版本的BI工程,新增了一個容器Websocket方案。推薦優先查看是否可使用該方案:容器Websocket方案
無需任何使用者操作,無需任何手動配置,無需額外開啟埠,系統可自動使用Web容器自帶的WebSocket進行連結,埠複用http埠。
方法一:如果沒用 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 埠。
若「管理系統>系統管理>標準」頁面不顯示Websocket設定項,說明此方案生效,Websocket 連結已正確配置,無需其他任何手動配置。
以 Windows 系統下使用方法一配置 WebSocket 為例。
搭建 HTTPS 環境的詳細內容參見:配置SSL憑證實現HTTPS存取。
在 FineDB 的 fine_conf_entity 表中新增以下 4 個參數項,參數資訊如下表所示:
WebSocketConfig.keyStore 和 WebSocketConfig.keyStorePassword 的配置如下圖所示:
注:fine_conf_entity 表中的WebSocketConfig.keyStore的值必須是絕對路徑,不可以是相對路徑。
資料庫表中新增資訊如下圖所示:
配置完成之後,重啟報表伺服器即可生效。
注:Https 配置 WebSocket 後,Http下 WebSocket 會請求不到。
以 Linux+Nginx+Tomcat 下使用方法二配置 WebSocket 為例。
注:非必要請勿使用自簽章憑證,使用自簽章憑證有可能會導致部分記錄丟失,詳情請參見 4.1 節。
注:已有憑證的可以跨越該步驟。
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 需要的憑證檔案。
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
轉發埠可直接在前臺進行配置,可參考文檔:標準 第三章
注:2019-09-27 及之前版本的 JAR 包,轉發埠生效參數項是 WebSocketConfig.requestPort 且只支援一個埠。如下所示:
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 *;」這個前端應該是已經有過配置,增加會導致前端無法選擇跨域配置,而導致錯誤。
問題描述:
使用方法二進行配置後,火狐瀏覽器存取還是空白,IE 瀏覽器存取範本沒有記錄。
這是因為自簽章的憑證不被瀏覽器信任,頁面能存取是因為手動新增了例外,但是48888埠沒有,所以瀏覽器攔截了 Socket 請求。
解決方案:
F12看一下攔截的請求,複製下來,直接存取一下48888埠新增安全例外或者手動新增。
這樣瀏覽器就可以查看實時記憶體了,如下圖所示:
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 可同時支援。
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙