Skip to main content

Apache HTTP Server

Для работы серверных компонентов Indeed CM на ОС Linux настройте веб-сервер Apache в качестве обратного прокси-сервера.

RHEL и производные дистрибутивы

Установка

Установите веб-сервер Apache с помощью следующих команд:

sudo yum install httpd
sudo systemctl enable httpd
sudo systemctl start httpd

Или установите веб-сервер Apache из исходного кода. Подробнее на портале Apache.

Выпуск SSL/TLS сертификата

Для настройки защищенного соединения выпустите SSL/TLS сертификат на имя рабочей станции с установленным веб-сервером Apache. Используйте самоподписанный сертификат или выпустите сертификат на УЦ:

  1. Создайте самоподписанный корневой сертификат утилитой openssl:

    openssl genrsa -out ca.key 2048
    openssl req -x509 -new -nodes -key ca.key -out ca.crt -days 3650 -subj "/CN=selfCA"
  2. Создайте файл конфигурации SSL.conf, который содержит настройки для генерации запроса на сертификат веб-сервера (вместо SERVER_FQDN подставьте DNS-имя рабочей станции с установленным Apache):

    nano SSL.conf
    Пример файла SSL.conf для генерации самоподписанного сертификата
    [ req ]
    default_bits = 2048
    encrypt_key = no
    default_md = sha256
    utf8 = yes
    string_mask = utf8only
    prompt = no
    distinguished_name = req_distinguished_name
    req_extensions = req_ext
    [ req_distinguished_name ]
    commonName = SERVER_FQDN
    [ req_ext ]
    subjectAltName = @alt_names
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    basicConstraints = CA:FALSE
    extendedKeyUsage = serverAuth
    [alt_names]
    DNS.1 = SERVER_FQDN
  3. Создайте утилитой openssl запрос на сертификат и выпустите сертификат для веб-сервера с помощью самоподписанного сертификата:

    openssl genrsa -out SSL.key 2048
    openssl req -new -sha256 -out SSL.csr -key SSL.key -config SSL.conf
    openssl x509 -req -days 365 -in SSL.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile SSL.conf -extensions req_ext -out SSL.crt
  4. Скопируйте файлы сертификата и ключа в папку, которая указана в файле конфигурации Apache:

    sudo cp ./SSL.crt /etc/httpd/ssl
    sudo cp ./SSL.key /etc/httpd/ssl
  5. Добавьте сертификат корневого УЦ в доверенные на рабочей станции с установленным Apache.

    sudo cp ./ca.crt /etc/pki/ca-trust/source/anchors/
    sudo update-ca-trust extract
  6. Сделайте сертификат доверенным в домене, например, с помощью групповых политик.

Настройка модулей и конфигурации

  1. Установите модуль mod_ssl:

    sudo yum install -y mod_ssl
  2. Добавьте в конфигурационный файл httpd.conf (расположение по умолчанию /etc/httpd/conf/httpd.conf) следующие директивы:

    Listen 3003
    LimitRequestLine 16384
    LimitRequestFieldSize 16384
    ServerName SERVER_FQDN
    Header append X-FRAME-OPTIONS "SAMEORIGIN"
    Header set X-Content-Type-Options "nosniff"

    В данном месте и далее замените SERVER_FQDN на имя используемого сервера.

Настройка сайта

Для работы Indeed CM создайте сайт в Apache, чтобы он обслуживал запросы и отправлял их на проксируемый адрес – сервис Indeed CM.

  1. Создайте файл сайта /etc/httpd/conf.d/SERVER_FQDN.conf:

    sudo touch /etc/httpd/conf.d/SERVER_FQDN.conf
  2. Заполните файл рекомендуемым содержимым.

    caution

    В параметрах SSLCertificateFile и SSLCertificateKeyFile указаны пути к созданным/импортированным в предыдущих шагах файлам сертификата и закрытого ключа. Проверьте указанные пути и имена файлов.

Рекомендуемое содержимое файла SERVER_FQDN.conf
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}/$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
Protocols h2 http/1.1
SSLCertificateFile /etc/httpd/ssl/SSL.crt
SSLCertificateKeyFile /etc/httpd/ssl/SSL.key
SSLCipherSuite @SECLEVEL=1:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384

ErrorLog “logs/error.log”
CustomLog “logs/access.log” combined

SSLEngine on
SSLProtocol -all +TLSv1.2
SSLHonorCipherOrder off
SSLCompression off
SSLSessionTickets on
SSLUseStapling off
SSLProxyEngine on
SetEnv nokeepalive ssl-unclean-shutdown
RequestHeader set X-Forwarded-Proto https
Header always set Strict-Transport-Security "max-age=63072000"

ProxyPreserveHost On

ProxyPass /cm/mc http://localhost:5001/cm/mc
ProxyPassReverse /cm/mc http://localhost:5001/cm/mc

ProxyPass /cm/ss http://localhost:5002/cm/ss
ProxyPassReverse /cm/ss http://localhost:5002/cm/ss

ProxyPass /cm/rss http://localhost:5003/cm/rss
ProxyPassReverse /cm/rss http://localhost:5003/cm/rss

ProxyPass /cm/api http://localhost:5004/cm/api
ProxyPassReverse /cm/api http://localhost:5004/cm/api

ProxyPass /cm/credprovapi http://localhost:5005/cm/credprovapi
ProxyPassReverse /cm/credprovapi http://localhost:5005/cm/credprovapi

ProxyPass /cm/oidc http://localhost:5008/cm/oidc
ProxyPassReverse /cm/oidc http://localhost:5008/cm/oidc

ProxyPass /cm/wizard http://localhost:5009/cm/wizard
ProxyPassReverse /cm/wizard http://localhost:5009/cm/wizard

</VirtualHost>

<VirtualHost *:3003>
protocols h2 http/1.1

SSLCertificateFile /etc/httpd/ssl/SSL.crt
SSLCertificateKeyFile /etc/httpd/ssl/SSL.key
SSLCipherSuite @SECLEVEL=1:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384

ErrorLog “logs/error.log”
CustomLog “logs/access.log” combined

SSLEngine on
SSLProtocol -all +TLSv1.2
SSLHonorCipherOrder off
SSLCompression off
SSLSessionTickets on
SSLUseStapling off
SSLProxyEngine on
RequestHeader set X-Forwarded-Proto https
Header always set Strict-Transport-Security "max-age=63072000"

ProxyPass /agentregistrationapi http://localhost:5006/agentregistrationapi
ProxyPassReverse /agentregistrationapi http://localhost:5006/agentregistrationapi

<Location "/agentserviceapi">
SSLVerifyClient optional_no_ca
SSLOptions +ExportCertData
RequestHeader unset x-ssl-client-cert
RequestHeader set x-ssl-client-cert "expr=%{escape:%{SSL_CLIENT_CERT}}"
#RequestHeader set x-ssl-client-cert "expr=%{escape:%{SSL_CLIENT_S_DN}}"

ProxyPass http://localhost:5007/agentserviceapi
ProxyPassReverse http://localhost:5007/agentserviceapi
</Location>
</VirtualHost>
  1. Перечитайте файл конфигурации:

    sudo httpd -t
    sudo systemctl restart httpd