Вход на сайт через Госуслуги на PHP

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Снова коснусь темы, по которой на Хабре уже выходило несколько публикаций: интеграция с ЕСИА. Сначала будет несколько особенностей, которые раньше не были описаны, а в конце будет грустный вывод.

В публикации «Интеграция с ЕСИА v2 на Debian 11 + php 7» автор пошел по пути использования расширения для PHP от КриптоПро для подписания запросов и поддержал эндпоинт v2/ac только для этого варианта подписания. При этом в оригинальном пакете fr05t1k/esia была возможность подписывать запросы при помощи OpenSSL.

Я решил поддержать возможность подписывать запросы через OpenSSL, а также при помощи КриптоПро без установки расширения.

Чтобы подписать запрос при помощи OpenSSL, нужно добавить ему поддержку ГОСТ. Инструкция по установке есть в репозитории движка OpenSSL GOST Engine на гитхабе. По этой инструкции у меня удалось добавить поддержку ГОСТ даже на макбуке. Для убунты процесс еще проще, и если коротко сводится к установке пакета libengine-gost-openssl1.1 и изменении конфига /usr/lib/ssl/openssl.cnf, можно посмотреть как я это делаю в CI.

Далее подписание сводится к вызову двух команд: $privateKey = openssl_pkey_get_private(file_get_contents($this->privateKeyPath), $this->privateKeyPassword); и openssl_sign($message, $signature, $privateKey, 'md_gost12_256');. Подпись запишется в переменную $signature. Полностью, с обработкой ошибок, пример можно посмотреть в репозитории. Там же есть вариант через openssl dgst, используя exec. Полученную подпись нужно еще закодировать в base64 url safe.

Для КриптоПро способ такой же, как в публикации «Интеграция с ЕСИА v2 на Debian 11 + php 7», только еще добавляется вызов $certificate->PrivateKey()->set_KeyPin($this->pin); для передачи пароля закрытого контейнера, а сертификат выбирается по SHA1-хешу, а не полю Subject.

Чтобы подписать запрос через КриптоПро не устанавливая расширение для PHP, можно вызвать утилиту csptest через exec. Команда будет выглядеть так:

$command = "csptest -keyset -sign GOST12_256 -container $container -keytype exchange -in $messageFilePath -out $signatureFilePath";

Где $container — имя контейнера (можно узнать командой certmgr -list).

Отлично! Мы разобрались как формировать подпись запросов к ЕСИА четырьмя способами. Все работает, но прежде чем оформить весь полученный код в пакет, которым могли бы воспользоваться другие разработчики, я решил перечитать методические рекомендации и проверить все ли параметры используются правильно.

И только в этот момент, на странице 507, я заметил такое требование: «Разработчик технического решения должен обеспечить проведение процедуры оценки влияния на применяемые СКЗИ». Как оказалось, собственное решение должно пройти процедуру оценки влияния на СКЗИ, и об этом уже писали в комментариях к прошлым публикациям. Процедура довольно муторная, проще перейти на готовое решение.

Грустный вывод

В итоге мы получили поддержку нового эндпоинта ЕСИА v2/ac на PHP с возможностью подписать запрос через OpenSSL, а также оформили полученный код в пакет, но использовать пакет у нас не получится, потому что в таком случае наше решение должно пройти процедуру оценки влияния, а это процедура довольно муторная, и проще взять готовое решение. Урок о важности чтении документации и комментариев к статьям мною усвоен... Надеюсь, что созданный в процессе пакет поможет кому-то в целях обучения, а может даже войдет в состав какого-нибудь сертифицированного решения...

Источник: https://habr.com/ru/articles/888000/


Интересные статьи

Интересные статьи

10 лет назад мы начинали бизнес студии с разработки сайтов на CMS 1С-Битрикс. Сегодня наш основной стек связан с подходом Single Page Application на Symfony и Nuxt, но клиенты по-прежнему просят сайты...
Есть ли конкуренция на IT рынке в аналитике?Когда-то в мою команду нужен был новый продуктовый аналитик и мне предложили пособесить кандидатов и найти подходящего. Мы искали продуктового аналитика Mid...
На форуме разработчиков Битрикс был опубликована запись о злоумышленниках, которые добавляют скрипты на страницы сайтов. Рекомендации, как переиграть негодяев, ниже.
Эксперты Positive Technologies обнаружили уязвимость в системе управления сайтом «1С‑Битрикс: Управление сайтом», похожая уязвимость была выявлена в «Битрикс24» в начале 2023 года....
Привет, Хабр! Около трех недель я не публиковал обзоры походов на барахолки в Испании — просто потому, что никаких барахолок не было. В регионе все время проводились какие-то праздники, то католич...