SSL-соединение noVNC с x11vnc - PullRequest
5 голосов
/ 17 июня 2011

Я пытаюсь использовать SSL-соединение с x11vnc (VNC-сервер) и noVNC (VNC-клиент). Всякий раз, когда я пытаюсь подключиться, я получаю сообщение об ошибке «Неподдерживаемые типы безопасности: 19,18» от noVNC и «SSL: ssl_helper [2957]: выход из случая 2 (сбой ssl_init) SSL: accept_openssl: cookie от ssl_helper [2957] СБОЙ. 0 "от x11vnc. Если я отключу SSL для x11vnc, клиент сможет без проблем подключиться.

Я понимаю, что x11vnc поставляется в комплекте с программой просмотра Java-апплетов. Однако меня больше интересует noVNC на основе HTML5.

Оба x11vnc и noVNC работают на одном компьютере, используя команды:

x11vnc: x11vnc -forever -shared -unixpw_cmd [cmd] -ssl [pem]

noVNC: ./utils/websockify --ssl-only --cert = [pem] --web =. / 6080 localhost: 5900

Примечание: оба указывают на один и тот же шар. Я использую websockify вместо файла noVNC launch.sh, чтобы иметь больше опций, таких как --ssl-only.

Параметр шифрования для noVNC, похоже, не влияет на подключение к серверу (результаты одинаковы, независимо от того, включен он или нет).

Меня больше всего беспокоит безопасное соединение. На данный момент не похоже, что включение опции шифрования noVNC делает много, если SSL x11vnc должен быть отключен (опция шифрования заставляет noVNC использовать wss: // вместо ws: //). Если это создает безопасное соединение, пожалуйста, дайте мне знать. Иначе, как мне заставить noVNC и x11vnc работать с SSL?

1 Ответ

14 голосов
/ 18 июня 2011

Первые пояснения :

noVNC и websockify фактически являются отдельными проектами:

  • websockify - это универсальный прокси / мост, который позволяет соединениям WebSocket (например, из браузера) подключаться к необработанным службам сокетов TCP (например, VNC-серверу).
  • noVNC - клиент HTML5 VNC.

Если VNC-сервер поддерживает соединения WebSocket, то websockify не понадобится. Единственный VNC-сервер, который в настоящее время поддерживает прямые соединения WebSocket, - это это ответвление libvncserver . websockify включен в noVNC, так как большинство серверов VNC еще не поддерживают клиенты WebSocket, но websockify - это отдельный проект .

Вы имеете дело с двумя различными сетевыми подключениями, каждое из которых имеет отдельные параметры шифрования:

  1. noVNC (браузер) для websockify - с использованием протокола WebSocket
  2. websockify to x11vnc (VNC-сервер) - прямое соединение через сокет TCP

Протокол WebSocket поддерживает незашифрованные соединения (ws: //) и зашифрованные соединения SSL / TLS (wss: //).

Протокол RFB (Remote Frame Buffer), используемый в VNC, может обновляться во время инициализации для использования зашифрованного соединения. Поддерживается несколько методов шифрования, таких как TLS (тип защиты 18), VeNCrypt (тип защиты 19).

Теперь к вашему вопросу :

Когда вы передаете -ssl PEM в x11vnc, это включает шифрование RFB / VNC. noVNC не поддерживает шифрование RFB / VNC. Javascript недостаточно быстр, чтобы выполнять шифрование / дешифрование достаточно быстро, чтобы его можно было использовать для noVNC. обсуждается вопрос о добавлении крипто-API в Javascript , который позволит noVNC поддерживать этот тип шифрования.

Когда вы включили шифрование в noVNC, вы включили шифрование WebSocket (wss: //). Это шифрует соединение между браузером и websockify. Пока соединение между websockify и сервером VNC осуществляется через доверенную сеть (например, работает на одном сервере) и использует шифрование WebSocket в noVNC, незашифрованные данные не будут доступны. Однако если вы запустите websockify в той же системе, что и ваш браузер, а VNC-сервер удален, то трафик VNC от вашего клиента к серверной системе не будет зашифрован (если в будущем noVNC не получит поддержку шифрования RFB / VNC VeNCrypt).

В выводе websockify будет указано, зашифровано ли соединение WebSocket или нет.

...