Установка и использование платформы

REST API: формирование и проверка электронной подписи данных (PKI)

https://img.shields.io/badge/auth-required-orange.svg

Для сетей, работающих с использованием ГОСТ-криптографии, REST API-интерфейс предоставляет возможность формирования отсоединенной электронной подписи для передаваемых данных, а также ее проверки. Для формирования и проверки электронных подписей предусмотрена группа методов pki: POST /pki/sign и POST /pki/verify.

Все методы группы доступны только для сетей с ГОСТ-криптографией.

GET ​/pki​/keystoreAliases

Метод возвращает список с именами всех доступных хранилищ закрытых ключей ЭП.

Пример ответа:

GET ​/pki​/keystoreAliases:
{
   [
    "3Mq9crNkTFf8oRPyisgtf4TjBvZxo4BL2ax",
    "e19a135e-11f7-4f0c-9109-a3d1c09812e3"
   ]
 }

POST /pki/sign

Метод формирует отсоединённую ЭП для данных, передаваемых в запросе.

Важно

Метод /pki/sign недоступен при использовании PKI, то есть когда в конфигурационном файле ноды параметру node.crypto.pki.mode присвоено значение ON. В тестовом режиме PKI (node.crypto.pki.mode = TEST) или при отключенном PKI (node.crypto.pki.mode = OFF) метод можно использовать.

Запрос метода POST /pki/sign состоит из следующих полей:

  • inputData – данные, для которых требуется ЭП (в виде массива байт в кодировке base64);

  • keystoreAlias – имя хранилища для закрытого ключа ЭП;

  • password – пароль хранилища для закрытого ключа;

  • sigType – формат ЭП. Поддерживаемые форматы:

    • 1 – CAdES-BES;

    • 2 – CAdES-X Long Type 1;

    • 3 – CAdES-T.

    Пример запроса:

    POST /pki/sign:
    {
      "inputData" : "SGVsbG8gd29ybGQh",
      "keystoreAlias" : "key1",
      "password" : "password",
      "sigType" : 1,
    }
    

Метод возвращает поле signature, содержащее сгенерированную отсоединенную ЭП.

Пример ответа:

POST /pki/sign:
{
  "signature" : "c2RmZ3NkZmZoZ2ZkZ2hmZGpkZ2ZoamhnZmtqaGdmamtkZmdoZmdkc2doZmQjsndjfvnksdnjfn="
}

POST /pki/verify

Метод предназначен для проверки отсоединённой ЭП для данных, передаваемых в запросе. Запрос состоит из следующих полей:

  • inputData – данные, закрытые ЭП (в виде массива байт в кодировке base64);

  • signature – электронная подпись в виде массива байт в кодировке base64;

  • sigType – формат ЭП. Поддерживаются значения:

    • 1 – CAdES-BES;

    • 2 – CAdES-X Long Type 1;

    • 3 – CAdES-T;

  • extended_key_usage_list – список объектных идентификаторов (OID) криптографических алгоритмов, которые используются при формировании ЭП (опциональное поле).

Пример запроса:

POST /pki/verify:
{
 "inputData" : "SGVsbG8gd29ybGQh",
 "signature" : "c2RmZ3NkZmZoZ2ZkZ2hmZGpkZ2ZoamhnZmtqaGdmamtkZmdoZmdkc2doZmQ=",
 "sigType" : "CAdES_X_Long_Type_1",
 "extendedKeyUsageList": [
 "1.2.643.7.1.1.1.1",
 "1.2.643.2.2.35.2"
 ]
 }

Ответ метода содержит поле sigStatus с булевым типом данных: true – подпись действительна, false – подпись скомпрометирована.

Пример ответа:

POST /pki/verify:
{
  "sigStatus" : "true"
}

Проверка УКЭП

Метод POST /pki/verify имеет возможность проверки усиленной квалифицированной электронной подписи (УКЭП). Для корректной проверки УКЭП установите на вашу ноду корневой сертификат ЭЦП удостоверяющего центра (УЦ), при помощи которого будет осуществляться валидация подписи.

Корневой сертификат устанавливается в хранилище сертификатов cacerts используемой вами виртуальной машины Java (JVM) при помощи утилиты keytool:

sudo keytool -import -alias certificate_alias -keystore path_to_your_JVM/lib/security/cacerts -file path_to_the_certificate/cert.cer

После флага -alias укажите произвольное имя сертификата в хранилище.

Хранилище сертификатов cacerts расположено в поддиректории /lib/security/ вашей виртуальной машины Java. Чтобы узнать путь к виртуальной машине на Linux, воспользуйтесь следующей командой:

readlink -f /usr/bin/java | sed "s:bin/java::"

Затем добавьте к полученному пути /lib/security/cacerts и вставьте полученный абсолютный путь к cacerts после флага -keystore.

После флага -file укажите абсолютный или относительный путь к полученному сертификату ЭЦП удостоверяющего центра.

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

sudo keytool -keystore cacerts -storepasswd
Смотрите также