ВСЕ ЧТО ОПИСАНО ТУТ - НЕ РАОТАЕТ! То есть можно установить сертификат сервера web-интерфейса XenApp на nginx и терминировать сессию SSL на nginx и сам web-интерфейс будет работать правильно. НО! приложения в таком виде не запускаются! Citrix Reciever делает какой-то HTTPS запрос, который не имеет заголовка, а содержит несколько шестнадцатеричных символов и nginx этого не понимает!
Поэтому - в качестве reverse proxy и балансировщика нагрузки надо использовать HAproxy как описано тут: HAproxy - балансировщик нагрузки и reverse-proxy для XenApp и других HTTPS сервисов на одном IP
План работ:
Экспорт сертификата сервера Web-интерфейса в формате PFX (формат понятный Windows 2008).
Экспорт корневого сертификата нашего центра сертификации.
Преобразование сертификата сервера Web-интерфейса из формата PFX в формат PEM (понятный nginx).
Преобразование корневого сертификата нашего центра сертификации из формата *.cer в формат PEM (понятный nginx).
Настройка nginx
Настройка Web-интерфейса XenApp.
Итак приступим.
Шаг 1: Экспорт сертификата
Запускаем mmc.exe
Заходим в меню 'Console' и нажимаем 'Add/Remove Snap-in'.
Нажимаем кнопку 'Add', выбираем 'certificates' и нажимаем 'Add'.
Выбираем 'Computer Account' и нажимаем 'Next'.
Выбираем 'Local Computer' и нажимаем 'OK'.
Нажимаем 'Close' и затем 'OK'.
Разворачиваем меню 'Certificates' и нажимаем на папку 'Personal'.
Делаем правый клик на сертификате который будем экспортировать и выбираем 'All tasks' → 'Export'.
Появляется мастер. Убеждаемся что стоит галочка добавления приватного ключа и продолжаем выполнять инструкции мастера пока не будет сгенерирован .PFX файл.
Шаг 2: Экспорт корневого сертификата центра сертификации
Запускаем mmc.exe
Заходим в меню 'Console' и нажимаем 'Add/Remove Snap-in'.
Нажимаем кнопку 'Add', выбираем 'certificates' и нажимаем 'Add'.
Выбираем 'Computer Account' и нажимаем 'Next'.
Выбираем 'Local Computer' и нажимаем 'OK'.
Нажимаем 'Close' и затем 'OK'.
Разворачиваем меню 'Certificates' и нажимаем на папку 'Доверенные корневые центры сертификации'.
Делаем правый клик на сертификате который будем экспортировать и выбираем 'All tasks' → 'Export'.
Появляется мастер. Формат экспортируемого файла - X.509 (CER) в кодировка DER.
Шаг 3 : Перебрасываем сертификаты на машину nginx и извлекаем приватный ключ из сертификата сервера web-интерфейса
Передаем сертификат на машину с nginx и экспортируем приватный ключ из .PFX файла.
openssl pkcs12 -in webserver.pfx -nocerts -out webserver_key.pem
Следующая команда удалит пароль из приватного ключа, чтобы nginx не запрашивал его при старте.
openssl rsa -in webserver_key.pem -out webserver_key_nopassword.pem
И заменим файл с паролем на файл без пароля:
mv webserver_key_nopassword.pem webserver_key.pem
Для извлечения приватного ключа из PFX-файла выполните команду:
openssl pkcs12 -in filename.pfx -nocerts -out privatekey.pem\\
Для извлечения сертификата из PFX-файла выполните команду:
openssl pkcs12 -in filename.pfx -clcerts -nokeys -out certificate.crt\\
Шаг 4 : Извлекаем сертификат .pem из сертификата сервера web-интерфейса .pfx
Экспортируем сертификат из .PFX файла.
openssl pkcs12 -in webserver.pfx -clcerts -nokeys -out webserver_cert.pem
Шаг 5: Конвертируем корневой сертификат в формат PEM и присоединяем его к сертификату web-сервера
Конвертация из DER в PEM:
openssl x509 -inform der -in CA_certificate.cer -out CA_certificate.pem
А затем объединить корневой сертификат и сертификат сервера:
cat CA_certificate.pem >> webserver_cert.pem
Шаг 6: Настраиваем nginx
Во первых положим файлы сертификата и ключа в папку с конфигурацией nginx. У меня конфигурация nginx лежит в каталоге /usr/local/nginx/conf/.
cp webserver_cert.pem /usr/local/nginx/conf/certs/webserver_cert.pem cp webserver_key.pem /usr/local/nginx/conf/certs/webserver_key.pem
Затем в конфигурации nginx пропишем reverse-proxy на наш web-интерфейс XenApp:
server { listen 443 ssl; server_name xenapp.mycompany.com; ssl on; ssl_protocols SSLv3 TLSv1; ssl_certificate /usr/local/nginx/conf/certs/webserver_cert.pem; ssl_certificate_key /usr/local/nginx/conf/certs/webserver_key.pem; access_log /var/log/nginx/xenapp.mycompany.com.log main; location / { proxy_pass http://xenapp.mycompany.com; } }
С хоста nginx имя xenapp.mycompany.com должно резолвится в локальный IP-адрес сервера с Web-интерфейсом. Для этого пропишем его в /etc/hosts или на внутренний DNS.
Шаг 7: Настройка Web-интерфейса XenApp
У меня оба сайта Web-интерфейса настроены на 80 порту (без HTTPS). Настройка Web-интерфейса XenApp сводится к изменениию режима Secure Access.
До использования nginx у меня на одном сервере работали все компоненты XenApp - LicServer, сам XenApp, а также его Web-интерфейс и SecureGateway. В такой конфигурации у меня работал режим GatewayDirect. Теперь, когда мы избавились от SecureGateway, режим Secure Access нужно изменить на Direct.
Discussion