На сайте госуслуг можно заказать различные отчёты и выписки, подписанные электронной подписью. Основной документ обычно идёт в формате 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
— остоединённая электронная подпись документа
Внутри файла .sig
находится закодированный в Base64 файл подписи в формате PKCS#7, в таком виде он нам не нужен, поэтому мы его декодируем в бинарный формат:
% base64 -d 'Онлайн-выписка помещение.pdf.sig' > 'Онлайн-выписка помещение.pdf.der'
И дальше уже выполняем проверку:
% openssl smime -verify -in Онлайн-выписка\ помещение.pdf.der -inform DER -content Онлайн-выписка\ помещение.pdf -noverify -out /dev/null
Verification successful