Apache HTTP Server
Для работы серверных компонентов Indeed CM на ОС Linux настройте веб-сервер Apache в качестве обратного прокси-сервера.
- RHEL-based
- Debian-based
RHEL и производные дистрибутивы
Установка
Установите веб-сервер Apache с помощью следующих команд:
sudo yum install httpd
sudo systemctl enable httpd
sudo systemctl start httpd
Или установите веб-сервер Apache из исходного кода. Подробнее на портале Apache.
Выпуск SSL/TLS сертификата
Для настройки защищенного соединения выпустите SSL/TLS сертификат на имя рабочей станции с установленным веб-сервером Apache. Используйте самоподписанный сертификат или выпустите сертификат на УЦ:
- Самоподписанный сертификат
- Выпуск сертификата на УЦ
Создайте самоподписанный корневой сертификат утилитой openssl:
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -out ca.crt -days 3650 -subj "/CN=selfCA"Создайте файл конфигурации 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Создайте утилитой 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Скопируйте файлы сертификата и ключа в папку, которая указана в файле конфигурации Apache:
sudo cp ./SSL.crt /etc/httpd/ssl
sudo cp ./SSL.key /etc/httpd/sslДобавьте сертификат корневого УЦ в доверенные на рабочей станции с установленным Apache.
sudo cp ./ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust extractСделайте сертификат доверенным в домене, например, с помощью групповых политик.
Выпустите сертификат на УЦ, например на Microsoft CA, экспортируйте данный сертификат в формате PFX (с закрытым ключом, с цепочкой корневых/промежуточных УЦ) на рабочую станцию с установленным веб-сервером Apache.
infoСубъект (Subject) сертификата должен содержать FQDN сервера Apache.
Дополнительное имя субъекта (Subject Alternative Name) сертификата должно содержать атрибут DNS-имя (DNS Name) (FQDN сервера Apache). Например: server.demo.local или соответствующую запись с подстановочными знаками, например: *.demo.local (Wildcard certificate).
Улучшенный ключ (Enhanced Key Usage) сертификата должен содержать значение Проверка подлинности сервера (Server Authentication).Разделите PFX сертификат на файл цепочки сертификатов и ключ, оставьте файл закрытого ключа без пароля и подставьте имя импортированного файла вместо PFXFILE:
openssl pkcs12 -in PFXFILE.pfx -chain -nokeys | sed -ne '/-BEGIN CERTIFICATE/,/END CERTIFICATE/p' > SSL.crt
openssl pkcs12 -in PFXFILE.pfx -cacerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > root-ca.crt
openssl pkcs12 -in PFXFILE.pfx -nocerts -out SSLencrypted.key
openssl rsa -in SSLencrypted.key -out SSL.key
rm SSLencrypted.keyФайл цепочки сертификатов SSL.crt должен быть следующего вида:
-----BEGIN CERTIFICATE-----
#Ваш сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Промежуточный сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Корневой сертификат#
-----END CERTIFICATE-----На рабочей станции с установленным веб-сервером Apache добавьте сертификат корневого УЦ в список доверенных.
sudo cp root-ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust extractСкопируйте файлы цепочки сертификатов и ключа в папку, которая будет указана в найстройках сайта Apache:
sudo mkdir /etc/httpd/ssl
sudo cp SSL.crt /etc/httpd/ssl
sudo cp SSL.key /etc/httpd/ssl
Настройка модулей и конфигурации
Установите модуль mod_ssl:
sudo yum install -y mod_ssl
Добавьте в конфигурационный файл 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.
Создайте файл сайта /etc/httpd/conf.d/SERVER_FQDN.conf:
sudo touch /etc/httpd/conf.d/SERVER_FQDN.conf
Заполните файл рекомендуемым содержимым.
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>
Перечитайте файл конфигурации:
sudo httpd -t
sudo systemctl restart httpd
Debian и производные дистрибутивы
Установка
Установите веб-сервер Apache с помощью следующих команд:
sudo apt install apache2
sudo systemctl enable apache2
sudo service apache2 start
Или установите веб-сервер Apache из исходного кода. Подробнее на портале Apache.
Выпуск SSL/TLS сертификата
Для настройки защищенного соединения выпустите SSL/TLS сертификат на имя рабочей станции с установленным веб-сервером Apache. Используйте самоподписанный сертификат или выпустите сертификат на УЦ.
- Самоподписанный сертификат
- Выпуск сертификата на УЦ
Создайте самоподписанный корневой сертификат утилитой openssl:
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -out ca.crt -days 3650 -subj "/CN=selfCA"Создайте файл конфигурации 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Создайте утилитой 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Скопируйте файлы сертификата и ключа в папку, которая указана в файле конфигурации Apache:
sudo cp ./SSL.crt /etc/apache2/ssl/
sudo cp ./SSL.key /etc/apache2/ssl/Добавьте сертификат корневого УЦ в доверенные на рабочей станции с установленным Apache.
sudo cp ./ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust extractСделайте сертификат доверенным в домене, например, с помощью групповых политик.
Выпустите сертификат на УЦ, например на Microsoft CA, экспортируйте данный сертификат в формате PFX (с закрытым ключом, с цепочкой корневых/промежуточных УЦ) на рабочую станцию с установленным веб-сервером Apache.
infoСубъект (Subject) сертификата должен содержать FQDN сервера Apache.
Дополнительное имя субъекта (Subject Alternative Name) сертификата должно содержать атрибут DNS-имя (DNS Name) (FQDN сервера Apache). Например: server.demo.local или соответствующую запись с подстановочными знаками, например: *.demo.local (Wildcard certificate).
Улучшенный ключ (Enhanced Key Usage) сертификата должен содержать значение Проверка подлинности сервера (Server Authentication).Разделите PFX сертификат на файл цепочки сертификатов и ключ, сделайте файл закрытого ключа без пароля (вместо PFXFILE подставьте имя импортированного файла):
openssl pkcs12 -in PFXFILE.pfx -chain -nokeys | sed -ne '/-BEGIN CERTIFICATE/,/END CERTIFICATE/p' > SSL.crt
openssl pkcs12 -in PFXFILE.pfx -cacerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > root-ca.crt
openssl pkcs12 -in PFXFILE.pfx -nocerts -out SSLencrypted.key
openssl rsa -in SSLencrypted.key -out SSL.key
rm SSLencrypted.keyФайл цепочки сертификатов SSL.crt должен быть следующего вида:
-----BEGIN CERTIFICATE-----
#Ваш сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Промежуточный сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Корневой сертификат#
-----END CERTIFICATE-----На рабочей станции с установленным веб-сервером Apache добавьте сертификат корневого УЦ в список доверенных.
sudo cp root-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates -fСкопируйте файлы цепочки сертификатов и ключа в папку, которая будет указана в найстройках сайта Apache:
sudo cp SSL.crt /etc/apache2/ssl/
sudo cp SSL.key /etc/apache2/ssl/
Настройка модулей и конфигурации
Apache реализован в виде ядра и модулей, которые подключаются по необходимости использования дополнительной функциональности.
- Для работы системы включите модули:
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl
sudo a2enmod headers
sudo a2enmod rewrite
sudo systemctl restart apache2 - Добавьте в конфигурационный файл apache2.conf (расположение по умолчанию /etc/apache2/apache2.conf) следующие директивы: В данном месте и далее замените SERVER_FQDN на имя используемого сервера.
Listen 3003
LimitRequestLine 16384
LimitRequestFieldSize 16384
ServerName SERVER_FQDN
Header append X-FRAME-OPTIONS "SAMEORIGIN"
Header set X-Content-Type-Options "nosniff"
При установке Apache в ОС Astra Linux в файле apache2.conf может потребоваться отключение параметра AstraMode, подробнее на портале Astra Linux.
Настройка сайта
Для работы Indeed CM создайте сайт в Apache, чтобы он обслуживал запросы и отправлял их на проксируемый адрес – сервис Indeed CM.
Создайте файл сайта /etc/apache2/sites-available/SERVER_FQDN.conf
sudo touch /etc/apache2/sites-available/SERVER_FQDN.conf
Заполните файл рекомендуемым содержимым.
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/apache2/ssl/SSL.crt
SSLCertificateKeyFile /etc/apache2/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 ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/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/apache2/ssl/SSL.crt
SSLCertificateKeyFile /etc/apache2/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 ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/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>
Перечитайте файл конфигурации и включите файл сайта:
sudo a2ensite SERVER_FQDN
sudo apachectl configtest
sudo systemctl restart apache2