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

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

Для сетей, работающих с использованием ГОСТ-криптографии, gRPC-интерфейс имеет возможность формирования отсоединенной электронной подписи для передаваемых данных, а также ее проверки.

Для этого предусмотрено два метода, упакованных в protobuf-файл contract_pki_service.proto:

  • Sign – формирование отсоединённой ЭП для данных, передаваемых в запросе.

  • Verify – проверка отсоединённой ЭП для данных, передаваемых в запросе.

Формирование отсоединенной ЭП

Метод Sign требует ввода следующих параметров:

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

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

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

  • sig_type – формат ЭП. Поддерживаемые форматы: 1 – CAdES-BES; 2 – CAdES-X Long Type 1; 3 – CAdES-T.

Ответ метода содержит поле signature со сформированной электронной подписью в формате base64.

Проверка отсоединенной ЭП

Метод Verify требует ввода следующих параметров:

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

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

  • sig_type – формат ЭП. Поддерживаются значения: 1 – CAdES-BES; 2 – CAdES-X Long Type 1; 3 – CAdES-T;

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

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

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

Метод 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