Защищенное подключение к компоненту «Универсальный диспетчер»
Настройка защищенного подключения к компоненту «Универсальный диспетчер»
Для настройки защищенного подключения к компоненту «Универсальный диспетчер» нужно:
- скопировать закрытый ключ формата
.keyи сертификат формата.pemв каталог/etc/opt/termidesk-vdi:
sudo cp /etc/ssl/private/ssl-cert-snakeoil.key /etc/opt/termidesk-vdi/ sudo cp /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/opt/termidesk-vdi/
- назначить права по использованию ключа и сертификата пользователю
termidesk:
sudo chown termidesk:termidesk /etc/opt/termidesk-vdi/ssl-cert-snakeoil.*
- предоставить права на чтение файла
ssl-cert-snakeoil.key:
:~$ sudo chmod 644 /etc/opt/termidesk-vdi/ssl-cert-snakeoil.key
- отредактировать файл
/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
- пример содержимого файла
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
- перезапустить сервис
termidesk-vdi.service:
sudo systemctl daemon-reload && systemctl restart termidesk-vdi.service
- отредактировать файл
/etc/apache2/sites-available/termidesk.conf:- добавить в файл следующие строки:
SSLProxyEngine on SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off
где:
SSLProxyEngine - использование защищенного подключения по протоколу SSL/TLS, on - включить использование;
SSLProxyVerify - параметр контроля проверки сертификата. Доступны следующие значения: none - отключение проверки сертификата, optional - необязательная проверка сертификата, require - обязательная проверка сертификата, optional_no_ca - проверка сертификата без обязательной проверки цепочки сертификатов;
SSLProxyCheckPeerCN - проверка общего имени (Common Name, CN) сервера в сертификате, off - выключить проверку;
SLProxyCheckPeerName - проверка имени узла сервера в сертификате, off - выключить проверку;
SSLProxyCheckPeerExpire - проверка срока действия сертификата, off - выключить проверку.
- изменить значения в параметрах
ProxyPassиProxyPassReverseсhttpнаhttps:
- изменить значения в параметрах
ProxyPass / https://127.0.0.1:8000/ ProxyPassReverse / https://127.0.0.1:8000/
- изменить значения параметров
SSLCertificateFileиSSLCertificateKeyFile, указав путь до сертификатов:
- изменить значения параметров
SSLCertificateFile /etc/opt/termidesk-vdi/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/opt/termidesk-vdi/ssl-cert-snakeoil.key
- пример файла
termidesk.conf:
- пример файла
# Сайт для принудительного перенаправления на протокол HTTPS.
<VirtualHost *:80>
ServerName #HOSTNAME#
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 #HOSTNAME#
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 / http://127.0.0.1:8000/
ProxyPassReverse / http://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>
- перезапустить веб-сервер:
sudo systemctl daemon-reload && systemctl restart apache2.service
- проверить доступность веб-интерфейса.