Skip to content

HTTPS Конфигурация WebSocket

1. Обзор

1.1 Описание проблемы

HTTP - это протокол передачи гипертекста, в котором информация передается открытым текстом. HTTPS - это сетевой протокол, созданный на основе протокола SSL+HTTP, который обеспечивает шифрованную передачу данных, аутентификацию и является более безопасным, чем HTTP.

WebSocket может быть настроен в среде HTTPS двумя способами, которые более подробно описаны ниже.

Примечание: Для проектов BI 5.1.20 и более поздних версий добавлена новая схема контейнерных сокетов. Рекомендуется сначала проверить доступность этого решения: Container Websocket Solution

Без каких-либо действий со стороны пользователя, без ручной настройки, без открытия дополнительных портов система может автоматически использовать для подключения WebSocket, поставляемый вместе с веб-контейнером, и мультиплексирование портов http.

1.2 Идеи для решений

Метод 1: Если вы не используете Nginx, вы можете настроить SSL непосредственно на веб-сервере.

Метод 2: Если вы используете обратный прокси-сервер Nginx, вы можете настроить SSL на Nginx, в то время как сервер приложений, например Tomcat, не настраивает SSL, так что клиент и Nginx общаются по протоколу https, а Nginx и Tomcat - по протоколу http через proxy_pass.

Примечание 1: Проекты с пакетом JAR, созданным после 2019-12-05, поддерживают настройку WebSocket через визуальный интерфейс в Системе принятия решений о данных. Для получения дополнительной информации см.

Примечание 2: В версии 11.0.2 и более поздних добавлена новая схема websocket контейнера, чтобы помочь пользователям быстро настроить порты websocket.

Если настройкиWebsocket не отображаются на странице Manage System > System Management > General, это означает, что данное решение действует, и соединение Websocket настроено правильно, поэтому вам не нужно настраивать что-либо еще вручную.

2020-10-20_15-55-20.png

2. Метод 1: Прокси не настроен

В качестве примера можно привести настройку WebSocket с помощью метода 1 в системе Windows.

2.1 Создание среды HTTPS

Подробную информацию о настройке среды HTTPS см. в разделе: Настройка SSL-сертификатов для доступа по протоколу HTTPS.

2.2 База данных конфигурации

Добавьте следующие четыре параметра в таблицу fine_conf_entity в FineDB, как показано в следующей таблице:

термин параметразначение параметра
WebSocketConfig.protocolssl (по умолчанию)
WebSocketConfig.keyStoreЗначение поля keystoreFile из %TOMCAT_HOME%\conf\server.xml
WebSocketConfig.keyStorePasswordЗначение из поля keystorePass в файле %TOMCAT_HOME%\conf\server.xml
WebSocketConfig.keyStoreFormatJKS (по умолчанию)

Конфигурация WebSocketConfig.keyStore и WebSocketConfig.keyStorePassword показана ниже:

Примечание: Значение WebSocketConfig.keyStore в таблице fine_conf_entity должно быть абсолютным, а не относительным путем.

1.png

Новая информация, добавленная в таблицу базы данных, показана ниже:

1571810654997930.png

После завершения настройки перезапустите сервер отчетов, чтобы она вступила в силу.

Примечание: После настройки WebSocket в Https, WebSocket не будет запрашиваться в Http.

3. Метод 2: Настроенный прокси

Рассмотрим пример настройки WebSocket с помощью метода 2 на Linux+Nginx+Tomcat.

Примечание: Не используйте самоподписанные сертификаты без крайней необходимости, так как они могут привести к потере некоторых записей, подробнее см. в разделе 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.crt.

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

Сертификаты ЦС используются для подписи собственных сертификатов.

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 не используйте reload при перезапуске Nginx, используйте stop и start, иначе конфигурация может не вступить в силу.

1) Настройте порт 443

  
  
 server { listen 443 ssl; &  
   
 nbsp; имя_сервера 192.168.5.232; &  
 nbsp; ssl_certificate /mnt/hgfs/share/keys/server.crt; # абсолютный путь к сертификату &nbsp  
; ssl_certificate_key /mnt/hgfs/share/keys/server.key; #key absolute path & nbsp; ssl_session_cache shared:SSL:1m; #сохраняем тип и размер кэша SSL-сессий   
  
   
 ssl_session_timeout 5m; #Время истечения сессии &nbsp  
; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #Список шифров, разрешенных сервером для установления безопасного соединения &nbsp  
 nbsp; ssl_prefer_server_ciphers on; #Серверные шифры, основанные на протоколах SSLv3 и TLSv1, будут иметь приоритет над клиентскими шифрами.   
  
 #Отключите версию сервера в заголовке, чтобы хакеры не могли использовать атаки на уязвимость версии &  
 nbsp; #server_tokens off; #Если вы используете HTTPS для всего сайта и не рассматриваете  
 HTTP, вы можете добавить HSTS, чтобы сообщить браузеру, что сайт зашифрован, и принудительно открыть доступ по HTTPS #fastcgi_  
 param HTTPS on; & nbsp; #fastcgi_param HTTP_SCHEME &  
   
  
 nbsp; https; location / { &  
 nbsp; proxy_http_version 1.1; &  
   
 nbsp; proxy_set_header Connection ""; &  
 nbsp; proxy_buffering off;  
 proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header non_idempotent; & nbsp; proxy_set_header Connection ".   
  
 nbsp; proxy_redirect off; &nbsp  
; proxy_set_header Host $host; &  
 nbsp; proxy_set_header X-Real-IP $remote_addr; &  
 nbsp; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; &  
 nbsp; # Сообщите контейнеру (например, tomcat) о протоколе HTTPS, иначе контейнер может подумать, что это HTTP-запрос &  
 nbsp; proxy_set_header X-Forwarded-Proto $scheme;   
 proxy_connect_   
 таймаут 20; proxy_read_timeout  
 1000; proxy_send_  
   
 таймаут 300; &nbsp  
  
;proxy_pass http://FR.com; } }

2) Настройте порт WebSocket

WebSocket Configuration HTTPS подвержена проблемам. После запуска кластера вы можете проверить, отображается ли карта памяти в реальном времени в Intelligent Ops > Memory Management.

   
 server { listen 48889 ssl.   
 имя_сервера 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 &  
   
 nbsp;5m; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP  
  
; ssl_prefer_server_ciphers on; location /&  
  
 nbsp;{ proxy_request_buffering off; &  
 nbsp; proxy_buffering off; proxy_connect_  
  
 timeout 20; proxy_read_timeout 1000; &  
 nbsp; proxy_send_timeout 300; &  
 nbsp; proxy_http_version 1.1; proxy_set_  
 заголовок Upgrade $http_upgrade; proxy_set_header  
  
 Connection "upgrade"; proxy_pass http://WBS.com; &  
 nbsp; } }

Nginx по умолчанию прослушивает порт 38889, WebSocket узла по умолчанию прослушивает порт 48888, что может быть изменено. Порт пересылки - это параметр WebSocketConfig.requestPorts в таблице fine_conf_entity, и он поддерживает настройку нескольких портов для нескольких пересылок, как показано ниже:

idзначение
WebSocketConfig.port48888
WebSocketConfig.requestPorts48889

Порты переадресации могут быть настроены непосредственно во фронтенде, см. документацию: Общая глава 3

Примечание: Для пакетов JAR от 2019-09-27 и более ранних версий порт пересылки в действительном параметре - это WebSocketConfig.requestPort, и поддерживается только один порт. Как показано ниже:

idзначение
WebSocketConfig.port48888
WebSocketConfig.requestPort48889

3) Настройте форсирование HTTP на HTTPS

перезапись ^(. *)$ 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 доступ к шаблону не регистрируется.

Это происходит потому, что самоподписанные сертификаты не вызывают доверия у браузеров. Доступ к странице возможен, поскольку исключение было добавлено вручную, но не на порт 48888, поэтому браузер перехватывает запрос сокета.

Решение:

F12, чтобы увидеть заблокированные запросы, скопируйте их и посетите порт 48888 напрямую, чтобы добавить исключения безопасности или добавить их вручную.

1552632213Ey2N4v2s.png
1552632230ReRczyKU.png

Это позволяет браузеру просматривать живую память, как показано ниже:

1552632336hewk50V0.png

4.2 Другое

1) Ключевой путь:

  • Tomcat конфигурация сервера.xml абсолютный путь / относительный путь может быть.
  • Для параметра "Путь SSL-ключа" в разделе "Системное администрирование > Общие > Настройки https" в системе Data Decision System поддерживаются только абсолютные пути.

2) Дизайнер не поддерживает настройку HTTPS, а установленный EXE BI не поддерживает настройку HTTPS.

3) Если Nginx настроен на https, то не настраивайте его в настройках "Системное администрирование > Общие > https".

4) Проект Tomcat настроен на https, доступ к проекту возможен как по http, так и по https. Но websocket не может поддерживаться одновременно, https соединение будет нормальным, http соединение будет неудачным.

Nginx работает отлично, и в то же время можно поддерживать вебсокеты.