На сайте госуслуг можно заказать различные отчёты и выписки, подписанные электронной подписью. Основной документ обычно идёт в формате PDF, а электронная подпись скачивается отдельным файлом с расширением sig, так называемая отcоединённая электронная подпись. Выглядит скачивание документов с сайта примерно так:
На самом сайте госуслуг есть онлайновый сервис проверки подписи, однако проверить можно и на локальной linux-машине без сторонних проприетарных программ.
Сервис на сайте госуслуг располагается по адресу https://www.gosuslugi.ru/pgu/eds/, нас интересует раздел — электронного документа. ЭП — отсоединенная, в формате PKCS#7, там нужно загрузить документ и отсоединённую электронную подпись. Результат проверки показывается на экране.
Конфигурация системы¶
Для проверки подписи можно также использовать openssl, однако это требует предварительной настройки. Я всё рассказываю на примере debian/ubuntu.
Для начала нужно поставить пакет libengine-gost-openssl
вместе с openssl
из стандартного репозитория (в ubuntu нужно подключить universe):
% sudo apt install openssl libengine-gost-openssl
Теперь создаём файл /etc/ssl/gost.cnf
со следующим содержимым:
[openssl_init]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
default_algorithms = ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
Редактируем файл /etc/ssl/openssl.cnf
и добавляем в самый конец строчку:
.include /etc/ssl/gost.cnf
Если всё сконфигурировано правильно, вы должны увидеть корректно посчитанный дайджест после такой команды:
% echo 123 | openssl dgst -md -md_gost12_256
md_gost12_256(stdin)= 7b73f0736f6f8bd6edc4288452e19436b82db3a9f6bff8d4f402f15295095ade
Если же вы видите ошибки, значит, что-то пошло не так:
% echo 123 | openssl dgst -md -md_gost12_256
dgst: Unknown option or message digest: md_gost12_256
dgst: Use -help for summary.
4047B534FE7E0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:
../crypto/evp/evp_fetch.c:373:Global default library context, Algorithm (md_gost12_256 : 0), Properties (<null>)
Проверка электронной подписи¶
Допустим, у вас два файла с госуслуг:
Онлайн-выписка помещение.pdf
— собственно документОнлайн-выписка помещение.pdf.sig
— отсоединённая электронная подпись документа в формате PKCS#7
Выполняем проверку:
% openssl smime -verify -in Онлайн-выписка\ помещение.pdf.sig -inform DER -content Онлайн-выписка\ помещение.pdf -noverify -out /dev/null
Verification successful
Ранее ЭЦП документа была в BASE64-формате и перед использованием требовала дополнительной перекодировки в исходный бинарный, но на данный момент (июль 2025 года) с госуслуг возвращается ЭЦП в бинарном формате и этой дополнительной перекодировки не требуется.
Надо добавить флаг -i к команде base64, иначе декодирование не получается: base64 -di 'Онлайн-выписка помещение.pdf.sig' > 'Онлайн-выписка помещение.pdf.der'
Спасибо, перепровил и сейчас с госуслуг возвращается остоединённая подпись уже в бинаром формате, поэтому дополнительная перекодировка не нужна и убрал её совсем из текста.