Одним из важнейших требований, предъявляемых к протоколам обмена данными между информационными системами, является их защищенность. К сожалению, веб-сервисы SAS не поддерживают ни один из широко распространенных криптографических протоколов. Организовать защищенный обмен данными можно только с использованием стороннего веб-сервера, поддерживающего протоколы с шифрованием и выполняющего роль промежуточного звена между клиентом и веб-сервисами SAS.

В нашем случае в роли сервера SAS Web Application использовался JBoss 4.2.3 GA, а в роли стороннего веб-сервера – NGINX 1.10.0. Пример такое решения схематично изображен на рис. 1.

Рис. 1: Использование промежуточного веб-сервера для организации защищенного обмена данными.

Криптографический протокол SSL, который поддерживает NGINX, (а также его последующие реализации SSL 2.0, 3.0, TLS 1.0, 1.2) является «прослойкой» между прикладными и транспортными (в нашем случае – HTTPS и TCP/IP) протоколами. Для идентификации участников соединения (клиента и сервера) и шифрования данных, SSL использует цифровые сертификаты. Сертификаты могут быть самоподписными или выданными доверенным удостоверяющим центром (CA - Certificate Authority). С самоподписным сертификатом сложности могут возникнуть из-за того, что клиент не признает сервер доверенным. В большинстве случаев сервер SAS Web Application расположен внутри корпоративной сети и принимает запросы только от клиентов, находящихся внутри той же корпоративной сети, поэтому для выдачи SSL-сертификата логично использовать внутрикорпоративный CA.

Несомненным достоинством NGINX является предельная простота установки и настройки. Для начала необходимо скачать NGINX со страницы: http://nginx.org/ru/download.html. Установка готовых стабильных пакетов для Linux описана на странице http://nginx.org/ru/linux_packages.html#stable. Для Windows нужно просто скачать и распаковать архив. Настройка NGINX ограничивается редактированием конфигурационного файл nginx.conf, где нужно указать параметры виртуального хоста и описать правила перенаправления, используя директиву location. Пример такой конфигурации приведен ниже:

server {

listen                                                    443 ssl;

server_name                                    localhost;

proxy_connect_timeout              350;

proxy_send_timeout                    350;

proxy_read_timeout                     350;

send_timeout                                  350;

ssl_certificate                                   C:/nginx-1.10.0/имя_вашего_сертификата.cer;

ssl_certificate_key                         C:/nginx-1.10.0/ имя_вашего_сертификата.key;

ssl_session_cache                          shared:SSL:1m;

ssl_session_timeout                      10m;

ssl_ciphers                                         HIGH:!aNULL:!MD5;

ssl_prefer_server_ciphers          on;

location / {

proxy_pass                        http://localhost:8080/имя _вашего_сервиса;

proxy_redirect                 off;

}

location /SASBIWS/services/имя _вашего_сервиса {

proxy_pass                        http://localhost:8080/SASBIWS/services/имя _вашего_сервиса;

proxy_redirect                 off;

                }

}

Некоторые пояснения по директивам:

listen – задает порт и протокол виртуального сервера;

server_name - задает имя виртуального сервера (используем имя localhost, т.к. перенаправления осуществляются в рамках одного хоста);

ssl_certificate, ssl_certificate_key - полные пути к файлам с открытым и закрытым ключами, которые будут использоваться для SSL-соединения;

location – устанавливает конфигурацию в зависимости от URI запроса (в нашем случае конфигурации идентичные, используем для того, чтобы сделать перенаправление на конкретные сервисы SAS).

Работа NGINX под Windows имеет некоторые особенности: его можно запустить и как службу,  и как процесс. Запустить, как службу поможет Windows Server Wrapper. Службу можно настроить на перезапуск в случае остановки, а также автоматический запуск при старте системы. Опыт эксплуатации связки NGINX+JBoss, показал, что при перезапуске или недоступности сервера SAS Web Application процессы NGINX завершаются самопроизвольно. Поэтому необходимо периодически проверять наличие процессов nginx.exe в оперативной памяти системы. Например, это можно сделать при помощи скрипта, запускаемого по расписанию. Пример такого скрипта:

 

' Имя сценария: nginxprocmonitor.vbs

' Версия: 1.0

' Описание: Запускает процесс nginx, если он не запущен.

'

Option Explicit

Dim strComputer, strProcess, strRunDir, objWshShell

 

strComputer = "."

strProcess = "nginx.exe"

strRunDir = "C:\nginx-1.10.0"

Set objWshShell= WScript.CreateObject("WScript.Shell")

 

If Not isProcessRunning(strComputer, strProcess) then

                objWshShell.CurrentDirectory = strRunDir

                objWshShell.Run "nginx.exe",0,False

End If

 

Function isProcessRunning(byval strComputer,byval strProcessName)

                Dim objWMIService, strWMIQuery

        strWMIQuery = "SELECT * FROM Win32_Process WHERE name LIKE '" & strProcessName & "'"

                Set objWMIService = GetObject("winmgmts:" _

                               & "{impersonationLevel=impersonate}!\\" _

                                               & strComputer & "\root\cimv2")

        If objWMIService.ExecQuery(strWMIQuery).Count > 0 Then

                               isProcessRunning = True

                Else

                               isProcessRunning = False

                End If

End Function

 

По умолчанию сервисы SAS используют порт 8080, поэтому для блокировки работы по протоколу HTTP используем брандмауэр. Проверить работоспособность вновь опубликованного HTTPS-сервиса можно, обратившись к его wsdl-описанию:

https://sasrtdmhost/SASBIWS/services/имя_вашего_сервиса?wsdl

После успешной проверки, не забудьте поменять адреса сервисов SAS на новые, т.к. старые мы заблокировали брандмауэром.