Сервис обслуживания ЭП

Сервис обслуживания ЭП — компонент модуля Базовые объекты. Сервис указывает в журнале подписей Web-клиента актуальный статус подписи, тип и дату окончания срока действия сертификата. Сервис обслуживания ЭП может работать в сочетании с Криптосервисом — Docker-контейнером, выполняющим функции обслуживания ЭП.

Для использования криптосервиса ЭП требуется Docker актуальной версии и опция лицензии Docsvision Сервис обслуживания электронной подписи (только для добавления архивного штампа времени). Криптосервис может быть получен из общего реестра образов Docker Hub — docsvision/cryptoservice или реестра образов Docsvision — packages.docsvision.com/cryptoservice.

Функциональные возможности сервиса обслуживания ЭП

Сервис обслуживания ЭП — расширение, входящее в стандартную поставку модуля Базовые объекты, не следует путать его с Криптосервисом. Криптосервис поставляется в виде Docker-контейнера.
Сервис обслуживания подписи:
  • Если срок действия сертификата не истёк, Сервис указывает в карточке актуальный статус подписи, тип и дату окончания срока действия сертификата, даёт возможность просматривать дополнительную информацию о подписи в журнале подписей Web-клиента.

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

  • В Docsvision версии 6.1 и выше Криптосервис является обязательным для проверки подписей CAdES-BES и CAdES-X Long Type 1 с нестандартными для .NET 6 алгоритмами в сертификатах. Требуется, например, при использовании сертификатов КриптоПро.

  • В Docsvision версии 6.1 и выше Криптосервис также необходим для функционирования Простой подписи.

Из-за использования библиотеки tspcom.dll Криптосервис требует быть развернут минимум в 32-битном процессе Службы рабочих процессов.

Установка и запуск Криптосервиса

Криптосервис может быть установлен и развёрнут двумя способами:

Установка с помощью Docker

Криптосервис работает с Docsvision следующих версий:
  • Модуль "Платформа" версии 6.1 и выше + "Web-клиент" 18 и выше.
    Криптосервис является обязательным для проверки подписей с нестандартными для .NET 6 алгоритмами в сертификатах. Требуется, например, при использовании сертификатов КриптоПро.

  • Модуль "Платформа" версии 5.5.5 + "Web-клиент" 17.
    Криптосервис указывает в журнале подписей Web-клиента актуальный статус подписи, тип и дату окончания срока действия сертификата, делает доступной расширенную информацию о подписи.

Криптосервис можно установить и запустить командой:

docker run -d -p 8100:8094 packages.docsvision.com/cryptoservice (1)
1 Если используется Docker Hub, замените packages.docsvision.com/cryptoservice на docsvision/cryptoservice.

Настройки криптосервиса задаются в командной строке.

При запуске контейнера необходимо связать порт хоста с портом контейнера, например, -p 8100:8094. В примере 8100 — порт хоста, 8094 — порт контейнера. Для работы функций проверки и формирования подписи сервер Docsvision должен подключаться к контейнеру через порт хоста. Адрес Криптосервиса указывается в реестре ОС, см. подробности ниже.

По умолчанию Криптосервис использует TSP-службу с адресом http://cryptopro.ru/tsp/tsp.srf. При необходимости адрес используемой TSP-службы можно переопределить с помощью переменной окружения TSP_SERVICE_ADDRESS. Ниже приведён пример переопределения адреса TSP-сервиса:

$ docker run -d -p 8100:8094 -e TSP_SERVICE_ADDRESS=http://testca2012.cryptopro.ru/tsp/tsp.srf packages.docsvision.com/cryptoservice

Контейнер поставляется в комплекте со следующими сертификатами:

При необходимости использования дополнительных сертификатов выполните одну из следующих настроек:

  • Укажите путь к папке сертификатов:

    1. Необходимые сертификаты сохраните в отдельную папку на диске Docker-хоста.

    2. Смонтируйте в каталог /var/cryptoservice/cacerts Docker-контейнера и запустите контейнер.
      При запуске контейнера всё содержимое папки будет импортировано в хранилище.

      docker run -d -p 8100:8094 -v D:\Cert:/var/cryptoservice/cacerts packages.docsvision.com/cryptoservice (1)
      1 Если используется Docker Hub, замените packages.docsvision.com/cryptoservice на docsvision/cryptoservice.
  • Заново соберите образ:

    1. Создайте Dockerfile:

      FROM packages.docsvision.com/cryptoservice
      COPY ./your/cacerts/ /var/cryptoservice/cacerts/ (1)
      1 Если используется Docker Hub, замените packages.docsvision.com/cryptoservice на docsvision/cryptoservice
    2. Соберите собственный образ:

      $ docker build . -t cryptoservice
    3. Запустите контейнер:

      $ docker run -d -p 8100:8094 cryptoservice

      События работы сервиса записываются в журнал Криптосервиса. Ознакомиться с журналом можно, имея идентификатор контейнера:

      sudo docker ps (1)
      sudo docker logs идентификатор-контейнера (2)
      1 Узнать идентификатор контейнера.
      2 Посмотреть журнал Криптосервиса.

Установка с помощью пакета установки

Поддерживается как установка на сервер Docsvision, так и машину без Docsvision.

  • При установке на сервер Docsvision параметр ComplexSignatureServiceAddress прописывается в ветку реестра HKEY_LOCAL_MACHINE\SOFTWARE\DocsVision\BackOffice\5.5\Server\Extension со значением по умолчанию ConnectAddress=http://127.0.0.1:8094/cryptoservice/api/v1.

  • При установке на машину без Docsvision параметр автоматически не добавляется в реестр, его нужно указать на сервере Docsvision самостоятельно.

    1. Запустите Docsvision CryptoService.msi и выполните последовательно шаги мастера установки:

      Запуск мастера установки Криптосервиса
      Рисунок 1. Запуск мастера установки Криптосервиса
    2. Примите условия лицензионного соглашения для продолжения установки.

      Условия лицензионного соглашения
      Рисунок 2. Условия лицензионного соглашения
    3. Если требуется, измените каталог установки Криптосервиса.

      Каталог установки компонентов Криптосервиса
      Рисунок 3. Каталог установки компонентов Криптосервиса
    4. В следующем окне нажмите Установить и дождитесь завершения установки.

      Завершение установки
      Рисунок 4. Завершение установки
    5. Дождитесь завершения установки, нажмите Готово. Запустите службу Docsvision CryptoService и выполните необходимые настройки для работы Криптосервиса, см. подробнее "Настройки Криптосервиса".

    6. После установки Криптосервиса, его нужно сконфигурировать. Конфигурация при установке с помощью инсталлятора отличается от конфигурации в контейнере Docker:

      1. Откройте файл C:\Program Files (x86)\Docsvision\CryptoService\appsettings.json и укажите следующие параметры:

        {
          "CryptoService": {
            "timestampservice.name": "http://cryptopro.ru/tsp/tsp.srf", (1)
            "logging.file.name": "C:\\ProgramData\\Docsvision\\CryptoService\\Crypto.log" (2)
          },
          "Java": [ (3)
            "-Xms256m",
            "-Xmx256m"
          ]
        }
        1 timestampservice.name — адрес TSP сервиса.
        2 logging.file.name — путь к файлу журнала.
        3 Java — массив параметров Java для разработчиков.

Настройки Криптосервиса для модулей Платформа 5.5.5 и Служба фоновых операций 5.5.2

Чтобы изменить настройки, перейдите на сервере Docsvision в ветку реестра:
  1. HKEY_LOCAL_MACHINE\SOFTWARE\DocsVision\BackOffice\5.5\Server\Extension.

  2. В указанной ветке создайте параметр ComplexSignatureServiceAddress со строковым значением — адресом Криптосервиса.

    Например, так: параметр ComplexSignatureServiceAddress со значением ConnectAddress=http://server.domain.com:8094/cryptoservice/api/v1.

  3. Зайдите в Консоль управления и создайте процесс Службы фоновых операций с типом конфигурации Обслуживание ЭП.

    Сервис обслуживания ЭП должен запускаться только в одном экземпляре рабочего процесса Службы фоновых операций.

Улучшение подписи с сертификатом без адреса OCSP сервиса

При улучшении подписи, созданной с помощью сертификата без адреса OCSP сервиса, могут возникать ошибки вида: The signer certificate <…​> must have OCSP evidence but it doesn’t contain any OCSP reference. OCSP evidence is not created.

Исправить ситуацию можно, если известен адрес OCSP сервиса, выдавшего сертификат.

Требования к сертификату:
  • Сертификат, которым выполнялась подпись, должен быть доверенным. Доверенный сертификат — это сертификат, у которого корневой и промежуточные сертификаты добавлены в доверенные в образе Крипто-сервиса.

  • Сертификат OCSP сервиса (для подписания ответов сервиса) должен быть доверенным. Сертификат с большой вероятностью будет недоверенным в случае, если используется неквалифицированная электронная подпись (НЭП).

  • Сертификат OCSP сервиса должен быть выпущен тем же УЦ, что и сертификат, которым выполнялась подпись (поле Issuer в сертификатах должно совпадать). Иными словами, нужно использовать OCSP сервис того же УЦ, который выпустил сертификат, которым выполнялась подпись. Только данный УЦ может контролировать статус отзыва сертификата.

  • Сертификат OCSP сервиса можно уточнить в УЦ.

  • Сертификат TSP сервиса также должен быть доверенным.

  • Получить сертификат TSP сервиса можно также через техподдержку компании, которая предоставляет сервис, либо через утилиту CryptExpert.

Когда адрес сервиса известен, необходимо в файле настроек криптосервиса /etc/cryptoservice/settings.json указать актуальные адреса OCSP серверов следующим образом:

{
    "ocspSettings": [
        {
            "ocspUrl": "http://ocsp-service.ru/ocspn/ocsp.srf", (1)
            "serial": "17192b01038046a1649b8a076964699c4" (2)
        },
        {
            "ocspUrl": "http://ocsp-service.example.ru/ocspn1000000/ocsp.srf",
            "serial": "1f409aa452fd10ee11500ea83ca0f3ce2"
        }
    ]
}
1 "ocspUrl" — адрес OCSP сервиса.
2 "serial" — серийный номер корневого сертификата улучшаемой подписи.

Конфигурационный файл settings.json должен располагаться в контейнере криптосервиса по пути /etc/cryptoservice/. Если в файле задана хотя бы одна группа настроек ocspSettings, то при улучшении подписи криптосервис будет проверять цепочку родительских сертификатов сертификата улучшаемой подписи.

Серийные номера сертификатов сопоставляются с номером, указанным в конфигурационном файле, при совпадении заданный адрес OCSP будет использоваться для самого близкого родительского сертификата. Чтобы серийный номер сертификата считывался успешно, поместите его в каталог конревных сертификатов /var/cryptoservice/cacerts.

Контейнер криптосервиса можно сразу смонтировать вместе с файлом настроек OCSP сервиса следующим образом:

$ docker run -d -p 8100:8094 -v /path/to/settings.json:/etc/cryptoservice/settings.json packages.docsvision.com/cryptoservice

Настройка подключения к криптосервису по HTTPS

  1. Создайте PKCS12-файл (.p12 или .pfx) предпочтительным способом. Шаг можно пропустить, если уже есть сертификат в формате .p12 или .pfx. Ниже приведён пример генерации файла при помощи утилиты OpenSSL.

    openssl pkcs12 -export \
    -in fullchain.pem \ (1)
    -inkey privkey.pem \ (2)
    -out keystore.p12 \ (3)
    -passout pass:MyP@ssw0rd (4)
    1 Промежуточный и конечный сертификат
    2 Приватный ключ
    3 Имя выходного PKCS12-файла
    4 Пароль для защиты PKCS12-файла
  2. Отредактируйте конфигурационный файл:

    • При работе через Docker создайте файл конфигурации.

      cat > application.properties <<EOF
      server.ssl.key-store=/keystore.p12 (1)
      server.ssl.key-store-password=MyP@ssw0rd (2)
      server.ssl.keyStoreType=PKCS12
      EOF
      1 Путь до PKCS12-файла в контейнере
      2 Пароль от PKCS12-файла
    • В Windows откройте файл конфигурации по адресу C:\Program Files (x86)\Docsvision\CryptoService\appsettings.json и укажите следующие параметры:

      {
        "CryptoService": {
          "timestampservice.name": "http://cryptopro.ru/tsp/tsp.srf",
          "logging.file.name": "C:\\ProgramData\\Docsvision\\CryptoService\\CryptoService.log",
          "server.ssl.key-store": "C:\\Program Files (x86)\\Docsvision\\CryptoService\\keystore.p12",  (1)
          "server.ssl.key-store-password": "MyP@ssw0rd", (2)
          "server.ssl.keyStoreType": "PKCS12"
        }
      }
      1 Путь до PKCS12-файла в контейнере
      2 Пароль от PKCS12-файла
  3. Запустите криптосервис.

    1. Запустите службу Docsvision CryptoService, если установка была выполнена при помощи инсталлятора.

    2. Если криптосеврис работает с использованием Docker, выполните:

      docker run -d -p 8100:8094 \
      -v $(realpath application.properties):/application.properties \ (1)
      -v $(realpath keystore.p12):/keystore.p12 \ (2)
      packages.docsvision.com/cryptoservice \
      java org.springframework.boot.loader.JarLauncher \
      --spring.config.additional-location=/application.properties (3)
      1 Монтирование файла конфигурации хост:контейнер
      2 Монтирование PKCS12-файла хост:контейнер
      3 Путь до файла конфигурации в контейнере