# Сертификаты и шифрование

# Обновление сертификатов Мониторинга и ПринтМенеджера

## Когда требуется

По окончании срока действия SSL-сертификатов их необходимо заменить.

## Шаги

По окончании срока действия сертификаты потребуется заменить. Для этого выполните обновление Мониторинга и ПринтМененджера с помощью разделов выше и добавьте в команды следующие ключи: SSL_CERT, SSL_KEY u SSL_CERT_CA с указанием новых файлов.

Например, онлайн обновление Мониторинга будет выглядеть так:

```
sudo curl -L https://s3.printum.io/box/monitoring/install.sh | sudo -E SSL_CERT=/directory/cert.crt SSL_KEY=directory/cert.key SSL_CERT_CA=/directory/ca.crt  bash -s agent
````

Где:

- `SSL_CERT` — полный путь до сертификата.
- `SSL_KEY` — полный путь до ключа.
- `SSL_CERT_CA` — полный путь до корневого сертификата.

# Обновление сертификатов балансировщика

## Описание

Обновление сертификатов в конфигурации с балансировщиком нагрузки (HAProxy). Сертификаты обновляются для всех компонентов: балансировщика, Мониторинга и каждого сервера ПМ.

## Обновление собственных сертификатов (через config.ini)

1. Укажите новые пути в конфигурационном файле `config.ini`:

```
Секция [General]

SSL_CERT_CA — полный путь до корневого сертификата (CA certificate).

Секция  [Balancer]

SSL_CERT — Полный путь до сертификата
SSL_KEY — Полный путь до ключа сертификата.

Секция [Monitoring]

SSL_CERT — Полный путь до сертификата
SSL_KEY — Полный путь до ключа сертификата.

Секции [PrintManager_1], [PrintManager_2], …, [PrintManager_N] 

SSL_CERT — Полный путь до сертификата
SSL_KEY — Полный путь до ключа сертификата.

```

2. Запустите скрипт установки повторно:

```
sudo ./install_all_offline.sh
```

## Обновление автоматических сертификатов (ежегодно)

1. Удалите старые сертификаты на сервере балансировщика:

```
sudo rm -fr /opt/printum_balancer/certificates
```

2. Выпустите новый корневой сертификат:

```
sudo /opt/printum_balancer/scripts/generate_ca_cert.sh
```

3. Перегенерируйте сертификаты:

```
cd /opt/printum_balancer/scripts
sudo ./regenerate_all_certs.sh -balancer <BALANCER_ADR> -pm <PM_1> -pm <PM_2> -pm <PM_3>
```

4. Появится архив с новыми сертификатами. Повторите установку всех серверов ПринтМенеджер с новым архивом `printum_certs.tar.gz`.

**Важно:** необходимо переписать только `printum_certs.tar.gz`. При установке использовался printum_config.tar.gz - его устанавливать не нужно.

# Изменение пароля шифрования конфигурационного файла

## Описание

Смена пароля для шифрования файла `.env.enc` выполняется с помощью утилиты `env-vault`.

## Для Мониторинга

1. Сбросьте переменную среды

        unset ENV_VAULT_PASSWORD
2. Запустите смену пароля

        env-vault rekey /opt/printum/.env.enc

3. Введите текущий пароль, затем новый дважды
4. После смены запустите систему с новым паролем:

        cd /opt/printum
        sudo -E ENV_VAULT_PASSWORD=<password> env-vault .env.enc docker-compose -- up -d

## Для ПринтМенеджера


1. Сбросьте переменную среды

        unset ENV_VAULT_PASSWORD

2. Запустите смену пароля

       env-vault rekey /opt/printmanager/.env.enc

3. Введите текущий пароль, затем новый дважды
4. Перезапустите систему с новым паролем:

        cd /opt/printmanager
        sudo -E ENV_VAULT_PASSWORD=<password> env-vault .env.enc docker-compose -- up -d


## Важно

- После смены пароля все последующие операции (обновление, бекап, восстановление) должны выполняться с новым паролем.
- Сохраните новый пароль в надёжном месте.

# Настройка шифрованного соединения для Мониторинга, ПМ и клиента ПМ

## Назначение

При установке системы автоматически создаётся самоподписанный SSL-сертификат, стандарта SHA-256 с длиной ключа шифрования RSA 2048 бит. Для работы мониторинга и управления печать в сети организации этого достаточно, но при необходимости (например, требования ИБ) допускается установка доверенного сертификата организации.

При необходимости используйте доверенный сертификат одного из типов:

- Сертификат, приобретённый или полученный у внешнего доверенного центра сертификации.
- Сертификат, выданный внутренним центром сертификации организации (Enterprise CA).

---

## Настройка HTTPS

Клиент ПринтМенеджера, отправляющий задания на печать с ПК пользователей, имеет параметр `verify_SSL_cert`, отвечающий за включение проверки сертификата безопасности. По умолчанию параметр установлен в `false`, т.е. проверка отключена.

Для включения проверки и обеспечения шифрованного соединения клиента ПМ с сервером ПринтМенеджера выполните настройки, описанные в разделах ниже, в соответствии с операционной системой на пользовательском АРМ.


### Настройка проверки HTTPS-сертификата для службы в Linux

Для корректной проверки сертификата и работы Клиента ПринтМенеджер по протоколу HTTPS выполните следующие действия:

1. Остановите службу Клиента ПМ:

```
sudo systemctl stop printum-printmanager-client.service
```

2. Откройте файл корневого сертификата, который подтверждает подлинность SSL-сертификата, используемого сервером ПМ. Скопируйте из него весь текст, вместе с `BEGIN`, `END` и дефисами.
3. Откройте с правами на редактирование файл:

```
/opt/printum/printmanager_client/venv/lib/python3.10/site-packages/certifi/cacert.pem
```

Для более ранних версий службы для Linux замените `python3.10` на `python3.8`.

4. В конец файла вставьте скопированное из шага 2 и сохраните файл.
5. Запустите службу Клиента ПМ:
```
sudo systemctl start printum-printmanager-client.service
```

### Настройка проверки HTTPS-сертификата для службы в Windows

1. Откройте файл корневого сертификата, который подтверждает подлинность SSL-сертификата, используемого сервером ПМ. Скопируйте из него весь текст, вместе с `BEGIN`, `END` и дефисами.
2. Откройте с правами на редактирование файл:

```
C:\Program Files\printum\printmanager_client\lib\certifi\cacert.pem
```

3. В конец файла вставьте скопированное из шага 1 и сохраните файл.
4. Перезапустите службу или перезагрузите компьютер.

---

## Шифрование данных между компонентами

Данные между пользователем и системой, а также между компонентами (Мониторинг и ПринтМенеджер) передаются по протоколу HTTPS.

|Тип пароля|Метод|Описание|
|:---|:---|:---|
|Пользовательские пароли (вход в систему)|PBKDF2|Хэширование с уникальной «солью» и несколькими десятками итераций|
|Пароли принтеров, доступа к каталогам и др.|AES CBC 128-bit + PKCS7|Шифрование с 128-битным ключом|



## Связанные страницы

- [Настройка IPPS для МФУ](http://wiki.printum.io/books/6-obnovlenie-i-obsluzivanie/page/nastroika-ipps-dlia-mfu)
- [Обновление сертификатов Мониторинга и ПринтМенеджера](http://wiki.printum.io/books/6-obnovlenie-i-obsluzivanie/page/obnovlenie-sertifikatov-monitoringa-i-printmenedzera)
- [Переменные .env Мониторинга](http://wiki.printum.io/books/8-spravocnik/page/peremennye-env-monitoringa)

# Настройка IPPS для МФУ

## Назначение

IPPS (Internet Printing Protocol over SSL) обеспечивает шифрование при отправке заданий печати на МФУ. Настройка требуется при использовании отложенной печати с шифрованием или при требованиях ИБ к защите потока печати.

---

## Настройка IPPS для отложенной печати

1. Перейдите в раздел **«Серверы печати»** по адресу:

```
https://адрес_принтменеджера:8080/config/web/printserver/
```

2. Для всех используемых серверов печати установите галочку **«Использовать SSL»** и сохраните форму.

Для прямой печати через IPPS используйте Клиент ПМ со стандартными настройками — при стандартных настройках IPPS включён по умолчанию.

---

## Установка защищённого соединения с МФУ для отправки задания на печать

1. Убедитесь, что в настройках МФУ включён доступ с использованием SSL для IPP-соединений, а сертификат сервера загружен в МФУ (или проверка серверного сертификата на МФУ не требуется / выключена).
2. Перейдите в панель администратора ПринтМенеджера, во вкладку **«Настройки принтеров в CUPS»**.
3. Найдите нужный принтер и нажмите на него.
4. Установите адрес для защищённого подключения в соответствии с вендором:

|Вендор|Адрес|
|---|---|
|Fplus|`https://{hostname}/ipp/print`|
|Lexmark|`https://{hostname}/ipp/print`|
|Xerox|`ipps://{hostname}/ipp`|
|Konica Minolta|`ipps://{hostname}/ipp`|

Где `hostname` — доменное имя или IP-адрес МФУ.

5. Сохраните настройки. Обновление займёт до 1 минуты.

---

## Связанные страницы

- [Настройка SSL для служб Мониторинга на Linux](http://wiki.printum.io/books/6-obnovlenie-i-obsluzivanie/page/nastroika-ssl-dlia-sluzb-monitoringa-na-linux)
- [Обновление сертификатов Мониторинга и ПринтМенеджера](http://wiki.printum.io/books/6-obnovlenie-i-obsluzivanie/page/obnovlenie-sertifikatov-monitoringa-i-printmenedzera)

# Шифрование конфигурационного файла .env

## Описание

Принтум поддерживает шифрование конфигурационного файла `.env` с помощью переменной `ENV_VAULT_PASSWORD` и утилиты `env-vault`. При включённом шифровании файл хранится в зашифрованном виде (`.env.enc`), а все команды запуска системы требуют указания пароля.

---

## Активация шифрования при установке Мониторинга

Для активации шифрования при установке дополнительно задайте переменную `ENV_VAULT_PASSWORD`.

### Онлайн-установка

По доменному имени:

```
sudo curl -L https://download.printum.io/box/monitoring/install.sh | sudo -E MON_HOSTNAME=<hostname> ENV_VAULT_PASSWORD=<password> bash -s agent
```

По IP-адресу:

```
sudo curl -L https://download.printum.io/box/monitoring/install.sh | sudo -E IP_ADDRESS=<ip> ENV_VAULT_PASSWORD=<password> bash -s agent
```

### Офлайн-установка

По доменному имени:

```
sudo MON_HOSTNAME=<hostname> ENV_VAULT_PASSWORD=<password> -E ./install.sh agent
```

По IP-адресу:

```
sudo IP_ADDRESS=<ip> ENV_VAULT_PASSWORD=<password> -E ./install.sh agent
```

В процессе установки необходимо будет повторно ввести пароль.

---

## Активация шифрования при установке ПринтМенеджера

Онлайн-установка:

```
sudo curl -L https://s3.printum.io/distrib/printum-printmanager/install.sh | sudo -E PM_HOSTNAME=<ip> ENV_VAULT_PASSWORD=<password> bash
```

Офлайн-установка:

```
sudo PM_HOSTNAME=<ip> ENV_VAULT_PASSWORD=<password> -E ./install.sh
```

Без указания переменной `ENV_VAULT_PASSWORD` установка ПринтМенеджера на зашифрованный сервер мониторинга невозможна.

---

## Изменение значений переменных в зашифрованном .env файле

### Для Мониторинга

1. Перейдите в каталог установки:

```
cd /opt/printum
```

2. Остановите контейнеры:

```
sudo -E ENV_VAULT_PASSWORD=<password> env-vault .env.enc docker-compose down
```

3. Откройте зашифрованный файл для редактирования:

```
sudo export EDITOR=nano
sudo source ~/.bashrc
sudo -E ENV_VAULT_PASSWORD=<password> env-vault edit .env.enc
```

Откроется текстовый редактор nano. Внесите изменения и сохраните файл.

4. Перезапустите контейнеры:

```
cd /opt/printum
sudo -E ENV_VAULT_PASSWORD=<password> env-vault .env.enc docker-compose -- up -d
```

### Для ПринтМенеджера

Следуйте аналогичной инструкции, заменяя путь к каталогу:

```
cd /opt/printmanager
```

---

## Смена пароля шифрования

### Для Мониторинга

1. Сбросьте переменную среды:

```
unset ENV_VAULT_PASSWORD
```

2. Запустите процесс смены пароля:

```
env-vault rekey /opt/printum/.env.enc
```

3. Введите текущий пароль, затем новый пароль дважды для подтверждения.
4. После смены пароля запустите систему с новым паролем:

```
cd /opt/printum
sudo -E ENV_VAULT_PASSWORD=<password> env-vault .env.enc docker-compose -- up -d
```

### Для ПринтМенеджера

1. Сбросьте переменную среды:

```
unset ENV_VAULT_PASSWORD
```

2. Запустите процесс смены пароля:

```
env-vault rekey /opt/printmanager/.env.enc
```

3. Введите текущий пароль, затем новый пароль дважды для подтверждения.
4. Перезапустите систему с новым паролем:

```
cd /opt/printmanager
sudo -E ENV_VAULT_PASSWORD=<password> env-vault .env.enc docker-compose -- up -d
```

---

## Резервное копирование при шифровании

При создании резервной копии на зашифрованной системе необходимо передавать пароль:

Для Мониторинга:
```
sudo -E ENV_VAULT_PASSWORD=<password> /opt/printum/backup.sh /home/user/backup
```

Для ПринтМенеджера:
```
sudo -E ENV_VAULT_PASSWORD=<password> /opt/printmanager/backup.sh /home/user/backup
```

При отсутствии указания переменной `ENV_VAULT_PASSWORD` резервная копия может быть создана некорректно.

---

## Примечания

- Для работы с шифрованными файлами необходимо наличие утилиты `env-vault` на сервере.
- При работе с конфигурационными файлами рекомендуется заранее создать резервную копию.

---

## Связанные страницы

- [Переменные .env Мониторинга](http://wiki.printum.io/books/8-spravocnik/page/peremennye-env-monitoringa)
- [Переменные .env ПринтМенеджера](http://wiki.printum.io/books/8-spravocnik/page/peremennye-env-printmenedzera)
- [Резервное копирование при шифровании конфигурационного файла](http://wiki.printum.io/books/6-obnovlenie-i-obsluzivanie/page/rezervnoe-kopirovanie-pri-sifrovanii-konfiguracionnogo-faila)
- [Изменение пароля шифрования конфигурационного файла](http://wiki.printum.io/books/6-obnovlenie-i-obsluzivanie/page/izmenenie-parolia-sifrovaniia-konfiguracionnogo-faila)

# Как обновить SSL-сертификаты Printum

<!--
title: Как обновить SSL-сертификаты Printum
slug: ts-ssl-obnovlenie-sertifikatov
tags: [ssl, сертификат, обновление, истёк срок, балансировщик]
domain: Operations
type: Runbook
audience: partner-engineer
product_versions: "4.x"
status: ready
related_components: [Мониторинг, ПринтМенеджер, Балансировщик]
related_pages:
  - trebovaniya-k-ssl-sertifikatam
  - kak-obnovit-printum
--->

### Когда использовать

- Истёк срок действия сертификатов.
- Изменился hostname или IP-адрес сервера.
- Требуется заменить сертификаты по требованиям ИБ.

---

### Основные приципы
Обновление сертификатов системы производится путём запуска обновления Мониторинга и ПринтМенеджера. При обновлении требуется указать переменные, содержащие ссылки на локальные файлы сертификатов:
* SSL_CERT - переменная для хранения пути ssl-сертификата сервера. 
* SSL_KEY - переменная для хранения пути ключа к ssl-сертификату. 
* SSL_CERT_CA - переменная для хранения пути корневового сертификата.

> **Примечание** Если во время установки системы в конфигурации Singlenode использовались автоматические сертификаты, то по истечению срока действия требуется обновить их на собственные сертификаты организации.

### Singlenode: обновление сертификатов Мониторинга
**Офлайн метод:**
```bash
tar xvf printum-x.x.x.tar.gz
cd printum-x.x.x
sudo -E SSL_CERT=/path/cert.crt \
       SSL_KEY=/path/cert.key \
       SSL_CERT_CA=/path/ca.crt ./install.sh 
```
**Онлайн метод:**
```bash
sudo curl -L https://s3.printum.io/box/monitoring/install.sh | \
  sudo -E SSL_CERT=/path/cert.crt \
       SSL_KEY=/path/cert.key \
       SSL_CERT_CA=/path/ca.crt bash
```

---

### Singlenode: обновление сертификатов ПринтМенеджер
**Офлайн метод:**
```bash
tar xvf printmanager-x.x.x.tar.gz
cd printmanager-x.x.x
sudo -E SSL_CERT=/path/cert.crt \
       SSL_KEY=/path/cert.key \
       SSL_CERT_CA=/path/ca.crt ./install.sh 
```
**Онлайн метод:**
```bash
sudo curl -L https://s3.printum.io/distrib/printum-printmanager/install.sh | \
  sudo -E SSL_CERT=/path/cert.crt \
       SSL_KEY=/path/cert.key \
       SSL_CERT_CA=/path/ca.crt bash
```

---

### Балансировщик: обновление собственных сертификатов через скрипт автоматической установки

В файле `config.ini` обновить пути к новым сертификатам:

```ini
[General]
SSL_CERT_CA = /path/to/new/ca.crt

[Balancer]
SSL_CERT = /path/to/balancer/cert.crt
SSL_KEY  = /path/to/balancer/cert.key

[Monitoring]
SSL_CERT = /path/to/monitoring/cert.crt
SSL_KEY  = /path/to/monitoring/cert.key

[PrintManager_1]
SSL_CERT = /path/to/pm1/cert.crt
SSL_KEY  = /path/to/pm1/cert.key

# [PrintManager_2], [PrintManager_3] — аналогично
```

Запустить скрипт:

```bash
sudo ./install_all_offline.sh
```

---

### Балансировщик: перевыпуск автоматических сертификатов для установки балансировщика вручную

Выполнять на сервере балансировщика раз в год:

```bash
# Удалить все сертификаты
sudo rm -fr /opt/printum_balancer/certificates

# Выпустить новый корневой сертификат
sudo /opt/printum_balancer/scripts/generate_ca_cert.sh

# Перевыпустить сертификаты для всех серверов
cd /opt/printum_balancer/scripts
sudo ./regenerate_all_certs.sh \
  -balancer <BALANCER_ADR> \
  -pm <PM_1> \
  -pm <PM_2> \
  -pm <PM_3>
```

Где `<BALANCER_ADR>`, `<PM_1>`, `<PM_2>`, `<PM_3>` — те же адреса, что использовались при первоначальной установке.

---

### Проверка после обновления

```bash
# Проверить срок действия нового сертификата М
openssl s_client -connect <адрес_М>:8001 </dev/null 2>/dev/null \
  | openssl x509 -noout -dates

# Проверить синхронизацию М–ПМ
cd /opt/printmanager
sudo docker-compose logs printmanager-celery-print-queue --tail=50 | grep -i ssl
```

Ошибок SSL нет. Синхронизация завершается успешно.

---

### Когда эскалировать

- Обновление сертификатов не устраняет SSL-ошибки.
- Цепочка доверия не проходит проверку.
- PKI управляется заказчиком.

---

### Связанные страницы

- [Требования к сертификатам безопасности](https://wiki.printum.io/books/3-ustanovka/page/trebovaniia-k-sertifikatam-bezopasnosti)
- [Hostname mismatch — сертификат не соответствует адресу](https://wiki.printum.io/books/7-ustranenie-neispravnostei/page/osibka-hostname-mismatch-posle-obnovleniia)
- [Как обновить Printum](https://wiki.printum.io/books/6-obnovlenie-i-obsluzivanie/page/kak-obnovit-printum)