Avanpost CA : 4. Настройка Nginx и TLS

Назначение

Nginx используется как reverse proxy для веб-интерфейса, REST API и протокольных сервисов Avanpost CA.

Пример публикует:

  • / — веб-интерфейс;
  • /api/ — REST API;
  • /swagger/ — документация API;
  • /scep/ — SCEP;
  • /ocsp/ — OCSP;
  • /public/ — публичные сертификаты и материалы CA;
  • /wstep/ — MS-WSTEP.

Состав endpoints необходимо сверять с версией установленного дистрибутива.

Предварительные требования

  • Avanpost CA запущен;
  • настроено DNS-имя <CA_FQDN>;
  • подготовлен TLS-сертификат с <CA_FQDN> в SAN;
  • подготовлена полная цепочка TLS-сертификата;
  • закрытый ключ TLS защищен;
  • TCP 443 доступен клиентам;
  • TCP 80 используется только для перенаправления на HTTPS либо закрыт.

1. Установка Nginx

sudo dnf install nginx
sudo systemctl enable nginx

2. Установка TLS-сертификата

Создайте каталог:

sudo install -d -o root -g nginx -m 750 /etc/nginx/tls

Разместите сертификат и ключ:

/etc/nginx/tls/avanpost-ca-fullchain.pem
/etc/nginx/tls/avanpost-ca.key

Установите права:

sudo chown root:nginx /etc/nginx/tls/avanpost-ca-fullchain.pem
sudo chown root:nginx /etc/nginx/tls/avanpost-ca.key
sudo chmod 640 /etc/nginx/tls/avanpost-ca-fullchain.pem
sudo chmod 640 /etc/nginx/tls/avanpost-ca.key

Проверьте сертификат:

openssl x509 \
  -in /etc/nginx/tls/avanpost-ca-fullchain.pem \
  -noout \
  -subject \
  -issuer \
  -dates \
  -ext subjectAltName

3. Создание конфигурации

Создайте:

sudo vi /etc/nginx/conf.d/avanpost-ca.conf

Добавьте:

server {
    listen 80;
    server_name <CA_FQDN>;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name <CA_FQDN>;

    ssl_certificate     /etc/nginx/tls/avanpost-ca-fullchain.pem;
    ssl_certificate_key /etc/nginx/tls/avanpost-ca.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_session_cache shared:TLS:10m;
    ssl_session_timeout 10m;

    access_log /var/log/nginx/avanpost-ca-access.log;
    error_log  /var/log/nginx/avanpost-ca-error.log warn;

    proxy_http_version 1.1;
    proxy_redirect off;
    proxy_set_header Host              $host;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_connect_timeout 10s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;

    location /api/ {
        proxy_pass http://127.0.0.1:9999/api/;
    }

    location /swagger/ {
        proxy_pass http://127.0.0.1:9999/swagger/;
    }

    location /scep/ {
        proxy_pass http://127.0.0.1:9999/scep/;
    }

    location /ocsp/ {
        proxy_pass http://127.0.0.1:9999/ocsp/;
    }

    location /public/ {
        proxy_pass http://127.0.0.1:9999/public/;
    }

    location /wstep/ {
        proxy_pass http://127.0.0.1:9999/wstep/;
    }

location /epass/ { proxy_pass http://127.0.0.1:9999/epass/; }

location /enrolment/ { proxy_pass http://127.0.0.1:9999/enrolment/; }     location / { proxy_pass http://127.0.0.1:8080; } }

Если backend Avanpost CA слушает другие адреса или порты, замените значения в соответствии с конфигурацией установленной версии.

4. Проверка конфигурации

sudo nginx -t

Ожидаемый результат:

syntax is ok
test is successful

5. SELinux

Не переводите SELinux в permissive без отдельного согласованного решения.

Если Nginx не может подключиться к локальному backend, для ОС с совместимой SELinux-политикой может потребоваться:

sudo setsebool -P httpd_can_network_connect 1

Восстановите контексты:

sudo restorecon -Rv /etc/nginx
sudo restorecon -Rv /var/log/nginx

Конкретные правила SELinux должны соответствовать используемой ОС и политике усиления.

6. Запуск Nginx

sudo systemctl enable --now nginx
sudo systemctl reload nginx
sudo systemctl status nginx

7. Проверка HTTPS

curl --head http://<CA_FQDN>/

Ожидается перенаправление на HTTPS.

Проверьте TLS:

openssl s_client \
  -connect <CA_FQDN>:443 \
  -servername <CA_FQDN> \
  -verify_return_error

Проверьте интерфейс:

curl --head https://<CA_FQDN>/

Не используйте curl -k как итоговую проверку: этот параметр отключает проверку доверия.

8. Ограничение административного доступа

Если архитектура позволяет, ограничьте административный интерфейс доверенными сетями:

location / {
    allow <ADMIN_NETWORK_CIDR>;
    deny all;

    proxy_pass http://127.0.0.1:8080;
}

Не применяйте это ограничение к публичным AIA, CDP, CRL и OCSP, если они должны быть доступны внешним проверяющим сторонам.

Критерии готовности

  • Nginx запущен;
  • конфигурация проходит nginx -t;
  • HTTP перенаправляется на HTTPS;
  • сертификат действителен;
  • имя <CA_FQDN> присутствует в SAN;
  • TLS 1.2 и TLS 1.3 доступны;
  • reverse proxy передает запросы Avanpost CA;
  • административный интерфейс ограничен согласно архитектуре;
  • SELinux не отключен глобально.

Следующий шаг

Перейдите к странице Проверка установки.

Обсуждение