# Генерация SSL-сертификата для Nginx в XC_VM

В этом документе описан процесс создания самоподписанного SSL-сертификата. Следуйте шагам, чтобы настроить безопасное HTTPS-соединение.

> **Примечание:** Свежая установка уже генерирует **уникальный** самоподписанный
> сертификат автоматически (инсталлятор запускает `openssl` и пишет
> `server.key`/`server.crt` в `bin/nginx/conf/` до старта Nginx), а `CertbotCronJob`
> позже заменяет его настоящим сертификатом Let's Encrypt. Следуйте этому
> руководству только для **ручной перегенерации или замены** сертификата.

---

## Обзор

**SSL (Secure Sockets Layer)** используется для шифрования соединений между клиентом и сервером, обеспечивая безопасность данных и доверие пользователей.
В этой инструкции показано, как создать **самоподписанный SSL-сертификат** для встроенного **Nginx** в проекте **XC_VM**.

---

## Расположение конфигурации

Все SSL-файлы (ключ, сертификат и конфигурация) хранятся в директории:

```bash
/home/xc_vm/bin/nginx/conf
```

Перед началом работы перейдите в неё:

```bash
cd /home/xc_vm/bin/nginx/conf
```

---

## Шаг 1. Создание приватного ключа

Сгенерируйте **RSA-приватный ключ** (2048 бит):

```bash
openssl genrsa -out server.key 2048
```

📄 После выполнения появится файл `server.key`, содержащий **закрытый ключ**.
Храните его **в секрете** — этот файл используется для подписи SSL-сертификата.

---

## Шаг 2. Создание конфигурационного файла `server.cnf`

Создайте файл конфигурации с параметрами сертификата:

```bash
cat > server.cnf << EOF
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
C = RU
ST = Moscow
L = Moscow
O = XC_VM
OU = XC_VM
CN = XC_VM

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = XC_VM
EOF
```

📘 **Описание параметров:**

| Поле    | Значение | Назначение                      |
| ------- | -------- | ------------------------------- |
| `C`     | RU       | Страна (Country)                |
| `ST`    | Moscow   | Регион (State)                  |
| `L`     | Moscow   | Город (Locality)                |
| `O`     | XC_VM    | Организация                     |
| `OU`    | XC_VM    | Отдел / подразделение           |
| `CN`    | XC_VM    | Имя хоста (Common Name)         |
| `DNS.1` | XC_VM    | Альтернативное имя домена (SAN) |

> 💡 **Совет:** можно указать реальное доменное имя, например `DNS.1 = example.com`, чтобы избежать предупреждений в браузере.

---

## Шаг 3. Генерация самоподписанного SSL-сертификата

Сгенерируйте сертификат с помощью созданного ключа и конфигурации:

```bash
openssl req -new -x509 -key server.key -out server.crt -days 3650 -config server.cnf
```

📆 **Пояснения:**

* `-new -x509` — создаёт новый самоподписанный сертификат.
* `-days 3650` — срок действия сертификата (10 лет).
* `-config server.cnf` — использование конфигурационного файла.
* Результатом будет файл `server.crt`.

---

## Итоговые файлы

После всех шагов в `/home/xc_vm/bin/nginx/conf` должны находиться:

| Файл         | Назначение                     |
| ------------ | ------------------------------ |
| `server.key` | Приватный ключ                 |
| `server.crt` | Самоподписанный SSL-сертификат |
| `server.cnf` | Конфигурация сертификата       |

---

## Результат

Теперь ваш **XC_VM Nginx сервер** доступен по протоколу **HTTPS**, используя созданный самоподписанный сертификат.
Браузеры могут предупреждать о «недоверенном сертификате» — это нормально для самоподписанных SSL.

---

## Примечания

* Самоподписанные сертификаты подходят **для внутреннего использования или тестирования**.
* Для публичных доменов используйте сертификаты от **доверенных центров** (например, [Let's Encrypt](https://letsencrypt.org/)).
* При изменении доменного имени (`CN` или `DNS.1`) необходимо **сгенерировать сертификат заново**.
* Чтобы проверить сертификат, выполните:

```bash
openssl x509 -in server.crt -text -noout
```

---