Интеграция с ЕСИА на базе oauth2-client (PHP)

Интеграция с ЕСИА на базе oauth2-client (PHP)

Только истинный криптонец способен сделать интеграцию с ключами из Crypto Pro

С 2020 года алгоритм RSA заменили алгоритмом ГОСТ-2012. Покажу пример интеграции сайта с гос услугами на php.

При интеграции с ЕСИА вы должны получить от заказчика файлы закрытого и открытого ключа. Если делали ключ через небезызвестный центр выдачи сертификатов Crypto Pro то вам должны были прислать 6 файлов контейнера закрытого ключа (header.key, masks.key, masks2.key, name.key, primary.key, primary2.key) и открытый ключ сертификата в формате .cer.

Для интеграции использовал пакет https://github.com/ekapusta/oauth2-esia.

Для использования пакета вам нужно преобразовать .cer в .crt. Делается это через стандартный openss вот такой командой:openssl x509 -inform DER -in YOUR_CERTIFICATE.cer -out YOUR_CERTIFICATE.crt

Если так выдает ошибку используйте -inform PEM.

Далее вам нужно преобразовать файлы закрытого ключа (6 файлов) в один ключ private.key. Утилита Crypto Pro позволяет получить pkcs12 с внутренними алгоритмами шифрования, чтобы получить pkcs12 с гостовскими алгоритмами нужно использовать проприетарщину (сторонний софт) или пробовать через c++ получить нужный формат. Под проприетарщиной имею ввиду утилиту P12FromGostCSP от компании lissi. Стоит это удовольствие 2000 рублей, установив утилиту и сертификат с ключом вы сможете получить через нее файл pfx в pkcs12 с понятными гостовскими алгоритмами шифрования.

Далее вам необходимо завести openssl с gostengine (поддержка гостовских алгоритмов). Я это делал на ubuntu ибо там понятнее. На просторах интернета найдете как завести это дело. Далее кидаете на ubuntu ваш файл pfx. С помощью команды openssl pkcs12 -in p12.pfx -out private.key.pem получаете файл с сертификатом и ключом. Из файла pem вас интересует только блок BEGIN PRIVATE KEY —END PRIVATE KEY. Это и есть необходимы для подписи для пакета интеграции файл закрытого ключа private.key.

Теперь у вас есть файл сертификата и ключа в нужных для интеграции форматах. Чтобы завести пакет https://github.com/ekapusta/oauth2-esia по гостовским алгоритмам вам нужна поддержка на хостинге гостовских алгоритмов, если у вас хост поддерживает их то компилите php с этими алгоритмами, если нет то рекомендую использовать docker контейнер rnix/openssl-gost и включить настройку toolpath: docker run --rm -i -v $(pwd):$(pwd) -w $(pwd) rnix/openssl-gost openssl.

После этих манипуляций интеграция должна получиться, про особенности использования тестового режима и рабочего писать не буду, об этом уже много сказано, но сначала делается на тестовых данных. Тестовые параметры подключения узнаете у заказчика и гос услуг.

У этой записи 2 комментариев

  1. а дайте код, пожалуйста, особенно где Вы указываете настройку toolpath

    1. ‘signer’ => new OpensslCli(‘/path/to/public/certificate.cer’, ‘/path/to/private.key’, ‘docker run —rm -i -v $(pwd):$(pwd) -w $(pwd) rnix/openssl-gost openssl’);
      Параметры OpensslCli посмотрите, там еще password вроде есть. Сам код в ссылке на ekapusta в статье.

Добавить комментарий

Закрыть меню