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

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

  • скопировать закрытый ключ формата .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/
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, 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/
BASH
    • изменить значения параметров SSLCertificateFile и SSLCertificateKeyFile, указав путь до сертификатов:
SSLCertificateFile /etc/opt/termidesk-vdi/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/opt/termidesk-vdi/ssl-cert-snakeoil.key
BASH
    • пример файла 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>
BASH
  • перезапустить веб-сервер:
sudo systemctl daemon-reload && systemctl restart apache2.service
BASH
  • проверить доступность веб-интерфейса.