Аннотация

В инструкции приведена последовательность действий по настройке защищенного подключения к компоненту «Универсальный диспетчер».

Настройка защищенного подключения к компоненту «Универсальный диспетчер»

Для настройки защищенного подключения к компоненту «Универсальный диспетчер» нужно:

  • скопировать закрытый ключ формата .key и сертификат формата .pem в каталог /etc/opt/termidesk-vdi:
:~$ sudo cp /etc/ssl/private/ssl-cert-snakeoil.key /etc/opt/termidesk-vdi/ && cp /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/opt/termidesk-vdi/
BASH
  • назначить права по использованию ключа и сертификата пользователю termidesk:
:~$ sudo chown termidesk:termidesk /etc/opt/termidesk-vdi/ssl-cert-snakeoil.*
BASH
  • предоставить права на чтение файла ssl-cert-snakeoil.key:
:~$ sudo chmod 644 /etc/opt/termidesk-vdi/ssl-cert-snakeoil.key
BASH
  • отредактировать файл /lib/systemd/system/termidesk-vdi.service, добавив аргументы --certfile и --keyfile с указанием пути к файлам ключа и сертификата:
--keyfile /etc/opt/termidesk-vdi/ssl-cert-snakeoil.key
--certfile /etc/opt/termidesk-vdi/ssl-cert-snakeoil.pem
BASH
  • пример содержимого файла termidesk-vdi.service:
[Unit]
Description=Termidesk-VDI daemon
After=network.target

[Service]
PIDFile=/run/termidesk-vdi/pid
Restart=on-failure
RestartSec=5

User=termidesk
Group=termidesk
WorkingDirectory=/opt/termidesk/share/termidesk-vdi/src

Environment=VIRTUAL_ENV=/opt/termidesk/share/termidesk-vdi/venv
Environment=PATH=/opt/termidesk/share/termideskvdi/venv/bin:/usr/sbin:/usr/bin:/sbin:/bin
EnvironmentFile=/etc/opt/termidesk-vdi/termidesk.conf

ExecStart=/bin/bash -c '/opt/termidesk/share/termidesk-vdi/venv/bin/gunicorn
server.wsgi:application --timeout 60 --workers $(expr $(nproc --all) \* 3) --keyfile
/etc/opt/termidesk-vdi/ssl-cert-snakeoil.key --certfile /etc/opt/termidesk-vdi/ssl-certsnakeoil.pem --bind 127.0.0.1:8000'

ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
BASH
  • перезапустить сервис termidesk-vdi.service:
:~$ sudo systemctl daemon-reload && systemctl restart termidesk-vdi.service
BASH
  • отредактировать файл /etc/apache2/sites-available/termidesk.conf:
    • добавить в файл следующие строки:
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
BASH

где:

  • «SSLProxyEngine» - параметр использования защищенного подключения по протоколу SSL/TLS;
  • «SSLProxyVerify» - параметр контроля проверки сертификата. Доступны следующие значения:
    • «none» - отключение проверки сертификата;
    • «optional» - необязательная проверка сертификата;
    • «require» - обязательная проверка сертификата;
    • «optional_no_ca» - проверка сертификата без обязательной проверки цепочки сертификатов;
  • «SSLProxyCheckPeerCN» - параметр проверки общего имени (Common Name, CN) сервера в сертификате;
  • «SSLProxyCheckPeerName» - параметр проверки имени узла сервера в сертификате;
  • «SSLProxyCheckPeerExpire» - параметр проверки срока действия сертификата.
    • изменить значения в параметрах ProxyPass и ProxyPassReverse с «http» на «https»:
ProxyPass / https://127.0.0.1:8000/
ProxyPassReverse / https://127.0.0.1:8000/
BASH
    • изменить значения параметров SSLCertificateFile и SSLCertificateKeyFile, указав путь до сертификатов:
SSLCertificateFile /etc/opt/termidesk-vdi/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/opt/termidesk-vdi/ssl-cert-snakeoil.key
BASH
    • пример файла termidesk.conf:
# Начиная с версии 4.2 сервера Termidesk по умолчанию все соединения
# перенаправляются в HTTPS.
# Сайт для принудительного перенаправления на протокол HTTPS.
<VirtualHost *:80>
		ServerName td-broker-02
		ProxyPass /websockify ws://127.0.0.1:5099/ timeout=10800
		ProxyPassReverse /websockify ws://127.0.0.1:5099/ timeout=10800
		RewriteEngine On
		RewriteCond "%{REQUEST_URI}" !^/websockify.*
		RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=308,L]
		RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
		ErrorLog ${APACHE_LOG_DIR}/error.log
		CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
		ServerName td-broker-02
		DocumentRoot /opt/termidesk/share/termidesk-vdi/src

		Alias /media/ /opt/termidesk/share/termidesk-vdi/src/media/
		Alias /static/ /opt/termidesk/share/termidesk-vdi/src/static/

		<Directory /opt/termidesk/share/termidesk-vdi/src/static>
			Order deny,allow
			Allow from all
			Require all granted
		</Directory>

		<Directory /opt/termidesk/share/termidesk-vdi/src/media>
			Order deny,allow
			Allow from all
			Require all granted
		</Directory>

		RewriteEngine on
		ProxyTimeout 70
		ProxyPreserveHost On
		ProxyRequests Off

		ProxyPassMatch ^/media/ !
		ProxyPassMatch ^/static/ !

		ProxyPass /websockify ws://127.0.0.1:5099/ timeout=10800
		ProxyPassReverse /websockify ws://127.0.0.1:5099/ timeout=10800
		ProxyPass / https://127.0.0.1:8000/
		ProxyPassReverse / https://127.0.0.1:8000/

		RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
		ErrorLog ${APACHE_LOG_DIR}/error.log
		CustomLog ${APACHE_LOG_DIR}/access.log combined

		SSLEngine on
		SSLProxyEngine on
		SSLProxyVerify none
		SSLProxyCheckPeerCN off
		SSLProxyCheckPeerName off
		SSLProxyCheckPeerExpire off
	SSLCertificateFile /etc/opt/termidesk-vdi/ssl-cert-snakeoil.pem
	SSLCertificateKeyFile /etc/opt/termidesk-vdi/ssl-cert-snakeoil.key

		# Для корректной работы Termidesk с MTLS необходимо настроить директивы ниже
	# в соответствии с условиями и требованиями окружения инсталляции
	# SSLCACertificateFile
	# SSLVerifyClient
	# SSLVerifyDepth

	# Проброс параметров клиентского сертификата в Termidesk
	# через набор собственных заголовков
	RequestHeader set X-TDSK-SSL_CLIENT_FORMAT 'apache'
	RequestHeader set X-TDSK-SSL_CLIENT_S_DN expr=%{SSL_CLIENT_S_DN}
	RequestHeader set X-TDSK-SSL_CLIENT_VALIDITY_START expr=%{SSL_CLIENT_V_START}
	RequestHeader set X-TDSK-SSL_CLIENT_VALIDITY_END expr=%{SSL_CLIENT_V_END}
	RequestHeader set X-TDSK-SSL_CLIENT_VERIFY expr=%{SSL_CLIENT_VERIFY}
	RequestHeader set X-TDSK-SSL_CLIENT_CERT expr=%{SSL_CLIENT_CERT}
</VirtualHost>
</IfModule>
BASH
  • перезапустить веб-сервер:
:~$ sudo systemctl daemon-reload && systemctl restart apache2.service
BASH
  • проверить доступность веб-интерфейса по адресу https://disp.termidesk.local.

где:

  • https://disp.termidesk.local - IP-адрес или полное доменное имя узла компонента «Универсальный диспетчер» Termidesk.