Продолжаем нашу историю с шифрованием
данных, передающихся от клиента к
терминальному серверу.

Конфигурируем

Сервер VNC

Прежде чем мы попробуем установить
безопасное соединение между сервером и
клиентом VNC, нужно сконфигурить Stunnel и
определить в нем все ключи и сертификаты.
Для этого в каталоге Stunnel создаем файл
конфигурации stunnel.conf примерно следующего
содержания:

CAfile = CAcert.pem 
CApath = certificates 
cert = server.pem 
client = no 
verify = 3 

[vnc] 
accept = 443 
connect = 127.0.0.1:5900

Он означает, что все входящие соединения
к 443 порту будут форвардится на локальный
порт 5900. Естественно, происходить это будет
только в том случае, если клиент подтвердит
свою благонадежность предоставив
правильный сертификат, который должен
храниться в локальной директории
сертификатов (пункт конфига verify = 3 говорит о
том, что сертификат должен удостоверяться
обоими сторонами). 

Следующий шаг как раз и состоит в том, что
бы запихнуть сертификаты в директорию Stunnel:
сертификат СА (C:\CA\CAcert.pem), приватный и открытый
ключ VNC (C:\CA\temp\vnc_server\server.pem). Наконец надо
загрузить сертификат VNC. Для того, что бы Stunnel мог найти его в
процессе аутентификации, нужно сперва
определить его имя:

C:\progra~1\openssl\openssl x509 -hash -noout -in client.crt

и затем скопировать client.crt в файл, имя
которого определит openssl, а расширение равно
0.

cd C:\CA\temp\vnc_client
C:\progra~1\openssl\openssl x509 -hash -noout -in client.crt
value
copy client.crt value.0

Получившийся файл копируем в C:\Program
Files\Stunnel\certificates. В результате должно
получится примерно следующее:

VNC Client

Процедура конфигурирования клиента
практически аналогична серверу. Делаем
stunnel.conf:

CAfile = CAcert.pem
CApath = certificates
cert = client.pem
client = yes
verify = 3

[vnc]
accept = 127.0.0.1:5900
connect = VNC_server_IP_address:443

Переписываем C:\CA\CAcert.pem
и C:\CA\temp\vnc_client\client.pem
в директорию Stunnel. Определяем имя сертификата сервера:

C:\progra~1\openssl\openssl x509 -hash -noout -in server.crt

и переписываем server.crt в имя.0. Получаем
примерно следующее:

Тестируем

Софт вроде как настроен — надо тестить.
Запускаем Stunnel на клиенте и сервере,
стартуем VNC. На клиенте VNC запускаем vncviewer.exe,
в качестве удаленного компьютера вводим
127.0.0.1. Если все сконфигурировано правильно
соединение должно установиться и Stunnel
сообщит об этом. Если нет — упорно роемся в
логам и пытаемся выяснить причину неудачи.
Для этого в конфиг Stunnel надо добавить:

debug = 7

и рестартовать программу.

Обратное соединение

Приведенный выше метод прекрасно
работает если клиент и сервер находятся в
одной сети. Но что если сервер VNC находится
за файрволом или NAT и внешние соединения к
нему не проходят?

Это можно обойти благодаря опции /listen в
клиенте VNC. В традиционной ситуации клиент-сервер
именно клиент инициирует TCP/IP соединение. Однако в
приведенном выше примере это работать не
будет, так как клиент просто не сможет
пробиться к серверу. Но в VNC конечно можно
обойти подобный казус и установить
обратное соединение.

На сервере пишем конфиг:

CAfile = CAcert.pem
CApath = certificates
cert = server.pem
client = yes
verify = 3

[vnc]
accept = 127.0.0.1:5500
connect = VNC_client_IP_address:443

На клиенте:

CAfile = CAcert.pem
CApath = certificates
cert = client.pem
client = no
verify = 3

[vnc]
accept = 443
connect = 127.0.0.1:5500

Ясно, что в этом случае клиент и сервер
поменялись ролями, сервер Stunnel стал SSL
клиентом, а Stunnel на клиентской стороне — SSL
сервером. Так же необходимо изменить способ,
каким соединяются VNC. Необходимо запустить
vncviewer.exe в слушающем режиме (пункт Run Listening VNC
Viewer в меню), потом на VNC сервере нужно
добавить нового клиента 127.0.0.1. После этого
остается лишь протестировать соединение и
определить его работоспособность :).
Неудобство метода состоит в том, что для
установления соединения необходимо
выполнить определенные действия на
сервере, что не совсем удобно. Автор статьи
предлагает засунуть все это во встроенный
шедулер и раз в 10 минут запускать сервер в
слушающем режиме.

Ссылки:

OpenSSL
Stunnel
VNC
Sample
openssl.conf

Simple
CA utility

Оставить мнение

Check Also

Tips’n’Tricks из арсенала андроидовода. Самые интересные, полезные и нестандартные трюки с Android

Многие годы мы рассказывали про самые разные способы оптимизировать, модифицировать и твик…