docs: nginx TLS с корпоративным wildcard VeriSign

This commit is contained in:
PTah
2026-05-26 21:14:22 +10:00
parent 2c12f161a1
commit 21578b27c9
4 changed files with 116 additions and 12 deletions
+2 -1
View File
@@ -5,7 +5,8 @@
1. [docs/install-ubuntu-24.04-native.md](../docs/install-ubuntu-24.04-native.md) 1. [docs/install-ubuntu-24.04-native.md](../docs/install-ubuntu-24.04-native.md)
2. `deploy/env.native.example``/opt/security-alert-center/config/sac-api.env` 2. `deploy/env.native.example``/opt/security-alert-center/config/sac-api.env`
3. `deploy/systemd/sac-api.service``/etc/systemd/system/` 3. `deploy/systemd/sac-api.service``/etc/systemd/system/`
4. `deploy/nginx/sac.conf.example``/etc/nginx/sites-available/sac` 4. `deploy/nginx/sac.conf.tls.example``/etc/nginx/sites-available/sac` (wildcard TLS)
или `sac.conf.example` — только HTTP / отладка
## Альтернатива: Docker ## Альтернатива: Docker
+48
View File
@@ -0,0 +1,48 @@
# /etc/nginx/sites-available/sac
# HTTPS с корпоративным wildcard-сертификатом (например VeriSign / DigiCert).
# Покрывает sac.kalinamall.ru при CN/SAN *.kalinamall.ru или sac.kalinamall.ru
#
# Перед включением:
# 1) Положите fullchain и ключ (см. docs/install-ubuntu-24.04-native.md §9)
# 2) Подставьте пути в ssl_certificate / ssl_certificate_key ниже
# 3) sudo nginx -t && sudo systemctl reload nginx
upstream sac_api {
server 127.0.0.1:8000;
keepalive 8;
}
# Редирект HTTP → HTTPS
server {
listen 80;
listen [::]:80;
server_name sac.kalinamall.ru;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name sac.kalinamall.ru;
# --- замените пути на ваши файлы wildcard ---
ssl_certificate /etc/ssl/sac/fullchain.pem;
ssl_certificate_key /etc/ssl/sac/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SAC_SSL:10m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
client_max_body_size 2m;
location / {
proxy_pass http://sac_api;
proxy_http_version 1.1;
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_read_timeout 60s;
}
}
+2 -2
View File
@@ -74,8 +74,8 @@ curl -sS https://sac.kalinamall.ru/health
## 5. TLS ## 5. TLS
- **certbot** + nginx (Let's Encrypt) - **Production (KalinaMall):** корпоративный **wildcard** (VeriSign / DigiCert) — см. [install-ubuntu-24.04-native.md](install-ubuntu-24.04-native.md) §9, шаблон `deploy/nginx/sac.conf.tls.example`
- Внутренний CA — сертификаты в nginx, доверие на агентах Windows/Linux - Альтернатива: **certbot** + Let's Encrypt (`deploy/nginx/sac.conf.example`)
--- ---
+64 -9
View File
@@ -192,31 +192,86 @@ journalctl -u sac-api -f
## 9. nginx и TLS ## 9. nginx и TLS
Шаблон **только HTTP (порт 80)** — без блока `ssl`, иначе `nginx -t` падает до выпуска сертификата. Для KalinaMall: **корпоративный wildcard** (VeriSign / DigiCert и т.п.), не Let's Encrypt.
Имя `sac.kalinamall.ru` должно попадать под сертификат (`*.kalinamall.ru` или явный SAN).
### 9.1. Установка файлов сертификата
Обычно от УЦ выдают:
| Файл | Назначение |
|------|------------|
| Сертификат сервера | `sac.kalinamall.ru` или wildcard |
| Промежуточные CA | chain / intermediate |
| Закрытый ключ | `.key`, хранить только на сервере |
Соберите **fullchain** (сервер + промежуточные, в правильном порядке — как указано в инструкции УЦ):
```bash
sudo mkdir -p /etc/ssl/sac
sudo chmod 750 /etc/ssl/sac
# Пример: скопировать с рабочей станции (scp) или собрать на сервере
# sudo nano /etc/ssl/sac/fullchain.pem # PEM: сервер, затем intermediate(s)
# sudo nano /etc/ssl/sac/privkey.pem # закрытый ключ
sudo chmod 644 /etc/ssl/sac/fullchain.pem
sudo chmod 640 /etc/ssl/sac/privkey.pem
sudo chown root:root /etc/ssl/sac/fullchain.pem
sudo chown root:ssl-cert /etc/ssl/sac/privkey.pem
```
Проверка PEM:
```bash
sudo openssl x509 -in /etc/ssl/sac/fullchain.pem -noout -subject -dates
sudo openssl rsa -in /etc/ssl/sac/privkey.pem -check -noout 2>/dev/null || \
sudo openssl pkey -in /etc/ssl/sac/privkey.pem -check -noout
```
Убедитесь, что в сертификате есть **`*.kalinamall.ru`** или **`sac.kalinamall.ru`**.
### 9.2. Конфиг nginx (HTTPS)
```bash ```bash
cd /opt/security-alert-center cd /opt/security-alert-center
sudo git pull sudo git pull
sudo cp deploy/nginx/sac.conf.example /etc/nginx/sites-available/sac sudo cp deploy/nginx/sac.conf.tls.example /etc/nginx/sites-available/sac
sudo nano /etc/nginx/sites-available/sac
# Проверьте пути ssl_certificate и ssl_certificate_key → /etc/ssl/sac/...
sudo ln -sf /etc/nginx/sites-available/sac /etc/nginx/sites-enabled/sac sudo ln -sf /etc/nginx/sites-available/sac /etc/nginx/sites-enabled/sac
# убрать default при необходимости: sudo rm -f /etc/nginx/sites-enabled/default sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t sudo nginx -t
sudo systemctl reload nginx sudo systemctl reload nginx
``` ```
Проверка через nginx (пока без HTTPS): Проверка:
```bash ```bash
curl -sS http://127.0.0.1/health -H "Host: sac.kalinamall.ru" | jq . curl -sS https://sac.kalinamall.ru/health | jq .
# или с DNS уже настроенным:
curl -sS http://sac.kalinamall.ru/health | jq .
``` ```
Let's Encrypt (добавит `listen 443 ssl` и пути к сертификатам): В `config/sac-api.env` должно быть: `SAC_PUBLIC_URL=https://sac.kalinamall.ru`
### 9.3. Агенты (ssh-monitor, RDP) и доверие к CA
- Агенты ходят на `https://sac.kalinamall.ru/api/v1/events`.
- Если используется **внутренний корневой CA**, а не публичный VeriSign/DigiCert в системном store — на Linux/Windows может понадобиться установка корневого сертификата в доверенные (или корпоративный прокси с подменой TLS).
- Для публичного коммерческого wildcard от известного УЦ обычно **дополнительных действий на агентах не нужно**.
### 9.4. Альтернатива: только HTTP (отладка)
Шаблон `deploy/nginx/sac.conf.example` — порт 80 без TLS. Не для production.
### 9.5. Альтернатива: Let's Encrypt
Если понадобится публичный бесплатный сертификат только на этот хост:
```bash ```bash
sudo cp deploy/nginx/sac.conf.example /etc/nginx/sites-available/sac
# ... nginx -t, reload, затем:
sudo certbot --nginx -d sac.kalinamall.ru sudo certbot --nginx -d sac.kalinamall.ru
sudo nginx -t && sudo systemctl reload nginx
``` ```
--- ---