Шифрование настроек в Сервисе настроек

В Сервис настроек сохраняются конфиденциальные данные системы Docsvision, например, пароли, ключи, строки подключения и т.д. Так как эти данные являются чувствительными, их рекомендуется шифровать. Данный раздел описывает шаги, необходимые для шифрования настроек, хранимых в Сервисе.

Настройка шифрования поддерживается в Сервисе настроек, начиная с версии 6.1, сборка 6.1.234 и выше.

Настройки шифрования указываются в конфигурационном файле Сервиса настроек, в параметре EncryptionCertificate. Требуется использовать самоподписанный сертификат, поддерживающий шифрование/дешифрование данных. Далее приводится инструкция по созданию сертификата и конфигурации Сервиса настроек.

В конфигурационном файле по умолчанию указан параметр EncryptionCertificate, однако шифрование осуществляться не будет, пока не указан один из подчинённых параметров: Path или Thumbprint. При необходимости создайте параметры самостоятельно.

Создание самоподписанного сертификата в Linux

  1. Установите пакет openssl командой:

    • Astra Linux / Альт Сервер / Ubuntu

    • РЕД ОС

    $ sudo apt-get install openssl
    $ sudo dnf install openssl
  2. Создайте самоподписанный сертификат SSL.

    $ openssl req -x509 -newkey rsa:2048 -keyout docsvision.key -nodes -out docsvision.crt -subj "/CN=example.company.com" -addext subjectAltName=DNS:example.company.com (1)
    1 Замените docsvision.key и docsvision.crt на собственные названия для ключа и сертификата, вместо /CN=example.company.com укажите адрес сервера Docsvision на Linux, например, /CN=help.docsvision.com.
  3. Сгенерируйте и сохраните сертификат docsvision.pfx:

    $ openssl pkcs12 -inkey docsvision.key -in docsvision.crt -export -out docsvision.pfx (1)

    Пароль на сертификат указывать не нужно.

Создание самоподписанного сертификата в Windows

  1. В ОС Windows самоподписанный сертификат можно сгенерировать следующей командой в PowerShell:

    New-SelfSignedCertificate -CertStoreLocation cert:\currentuser\my -DnsName "example.company.com" -FriendlyName "Docsvision Site" -KeyUsage "DigitalSignature", "KeyEncipherment" -KeyAlgorithm RSA  -KeyLength 2048 -NotAfter $([datetime]::now.AddDays(90))
    Расшифровка команды:
    • -CertStoreLocation cert:\currentuser\my — место установки сертификата

    • -DnsName "example.company.com" — адрес сайта

    • -FriendlyName "Docsvision Site" — название сайта

    • -KeyUsage "DigitalSignature", "KeyEncipherment" — обязательный для расшифровки параметр. Необходимо либо не указывать ограничения на использование сертификата (удалять KeyUsage), либо добавлять KeyEncipherment.

    • -KeyAlgorithm RSA — алгоритм шифрования

    • -KeyLength 2048 — длина ключа.

    • -NotAfter $([datetime]::now.AddDays(90)) — срок действия сертификата (90 дней). Рекомендуется устанавливать от 90 до 360 дней.

  2. Сертификат появится в хранилище Личное среди сертификатов пользователя, из которого его можно экспортировать в файл. Выберите сертификат из списка двойным нажатием мыши, откройте вкладку "Состав".

    Просмотр сертификата на вкладке "Состав"
    Рисунок 1. Просмотр сертификата на вкладке "Состав"
  3. Экспортируйте сертификат, нажав кнопку Копировать в файл, и проследуйте инструкциям мастера экспорта сертификатов.

Указание сертификата в конфигурационном файле

  1. В конфигурационном файле по адресу /usr/lib/docsvision/settingsservice/appsettings.json для Linux и C:\Program Files\Docsvision\SettingsService\appsettings.json для Windows укажите путь к сертификату c публичной частью в параметре Path или отпечаток сертификата в параметре Thumbprint. Использование отпечатка допустимо, когда сертификат установлен в операционной системе.

    • Указание пути к сертификату

    • Указание отпечатка сертификата

    Фрагмент конфигурационного файла с указанием пути к сертификату:
    {
      "StorageOptions": {
        "Providers": [
          {
          ...
          }
        ]
      },
      "EncryptionCertificate: {
        "Path": "/folder/certificate.crt" (1)
      }
    }
    1 Path — Путь к файлу сертификата для шифрования чувствительных данных в Сервисе настроек. Пользователь, от имени которого запускается Сервис настроек, должен обладать правами на чтение файла сертификата.
    • Если путь к сертификату не указан, укажите отпечаток сертификата. Использование отпечатка допустимо в случаях, например если сертификат установлен в операционной системе.

      Фрагмент конфигурационного файла с указанием отпечатка сертификата:
      {
        "ApiKey": "SettingsServiceApiKey",
        "StorageOptions": {
          "Providers": [
            {
            ...
            }
          ]
        },
        "EncryptionCertificate: {
          "Thumbprint": "certificate-thumbprint"  (1)
        }
      }
      1 Thumbprint — альтернативный вариант с указанием отпечатка сертификата.
      В ОС Linux поддерживается только сертификат в формате .pfx.
  2. После редактирования конфигурационного файла сохраните изменения и перезапустите службу Сервис настроек.

    Поиск сертификата по отпечатку будет выполняться в хранилище "Мои сертификаты" от имени пользователя, под которым запускается Сервис настроек (по умолчанию — системный пользователь Docsvision в Linux и Network Service в Windows). Если первый поиск не даст результатов, для Windows предусмотрен также поиск сертификата в хранилище "Локальный компьютер".

Установка сертификата с приватной частью

Следующим шагом необходимо установить приватную часть сертификата в хранилище сертификатов на всех серверах, данные которых шифруются, также включая сервер Консоли управления Docsvision.

Приватная часть сертификата предназначается для чтения (расшифровки) зашифрованных настроек.

  1. Полученный сертификат в формате .pfx необходимо скопировать в каталог ~/.dotnet/corefx/cryptography/x509stores/my. Если каталог отсутствует, создайте его самостоятельно.

    Если сервис, дешифрующий настройки, запущен от имени пользователя иного, чем ROOT, например от имени учётной записи Docsvision, сертификат требуется размещать по пути /home/docsvision/.dotnet/corefx/cryptography/x509stores/my.

    В ОС Windows сертификат необходимо установить в хранилище "Личное" на уровне "Локальный компьютер". Затем необходимо предоставить права на приватную часть сертификата для УЗ, от имени которой запускается сервис, дешифрующий настройки, (по умолчанию Network Service) в программе "Сертификаты", через управление закрытыми ключами (вызывается нажатием правой кнопки на сертификате).

    Пользователь, от имени которого запускается сервис, дешифрующий настройки, должен обладать правами на чтение и выполнение файлов в каталоге, а также правами на чтение сертификата.

Изменение и восстановление зашифрованных настроек

Чтобы повторно зашифровать или снять шифрование, потребуется заново указать зашифрованные настройки, а именно: Настройки соединений Docsvision, Настройки соединения с Почтовым сервером, Настройки Службы фоновых операций.

Если настройка EncryptionCertificate удалена, прочитать зашифрованные свойства будет невозможно до тех пор, пока удалённый сертификат не будет повторно указан в конфигурационном файле.

Если в соединении есть настройка, значение которой не удалось расшифровать, под ней будет выведено сообщение об ошибке. В случае возникновения ошибки чтения/расшифровки существующие:

  • Настройки соединений Docsvision — отображаются ранее созданные подключения. Добавленные раннее подключения могут быть изменены или удалены, могут быть добавлены новые подключения.

  • Настройки соединения с Почтовым сервером — отображаются ранее созданные подключения. Добавленные раннее подключения могут быть изменены или удалены, могут быть добавлены новые подключения.

  • Настройки Службы фоновых операций — отображаются ранее зарегистрированные экземпляры Службы фоновых операций и добавленные процессы. Могут быть добавлены новые процессы.

Запуск и восстановление работы компонентов:
  • Если при запуске компонента не удается расшифровать хотя бы одну необходимую ему настройку, служба компонента не запускается, а причина записывается в журнал.

  • Настройки, которые не удалось расшифровать, можно заново указать через Консоль управления даже если служба настраиваемого компонента не запущена.

  • После восстановления всех недоступных для чтения настроек необходимо перезапустить службу соответствующего компонента.