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
+64 -9
View File
@@ -192,31 +192,86 @@ journalctl -u sac-api -f
## 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
cd /opt/security-alert-center
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
# убрать default при необходимости: sudo rm -f /etc/nginx/sites-enabled/default
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
```
Проверка через nginx (пока без HTTPS):
Проверка:
```bash
curl -sS http://127.0.0.1/health -H "Host: sac.kalinamall.ru" | jq .
# или с DNS уже настроенным:
curl -sS http://sac.kalinamall.ru/health | jq .
curl -sS https://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
sudo cp deploy/nginx/sac.conf.example /etc/nginx/sites-available/sac
# ... nginx -t, reload, затем:
sudo certbot --nginx -d sac.kalinamall.ru
sudo nginx -t && sudo systemctl reload nginx
```
---