
С 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
.
После этих манипуляций интеграция должна получиться, про особенности использования тестового режима и рабочего писать не буду, об этом уже много сказано, но сначала делается на тестовых данных. Тестовые параметры подключения узнаете у заказчика и гос услуг.
Alex
8 Июл 2020а дайте код, пожалуйста, особенно где Вы указываете настройку toolpath
admin
13 Июл 2020‘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 в статье.
Alex
21 Сен 2020дай бог Вам здоровья
Кирилл
7 Мар 2021Здравствуйте, не могли бы вы кое-что пояснить? Вы написали:
» Из файла pem вас интересует только блок BEGIN PRIVATE KEY —END PRIVATE KEY. Это и есть необходимы для подписи для пакета интеграции файл закрытого ключа private.key»
Я правильно понимаю, что нужно этот блок скопировать, вставить в текстовый редактор и сохранить файл как private.key?
Создаю экземпляр провайдера с таким сайнером
‘signer’ => new OpensslCli(
‘open.crt’, // Открытый ключ .cer преобразованный в .crt
‘private.key’, // Ключ, выдранный из private.key.pem текстовым редактором
«»,
‘docker run —rm -i -v $(pwd):$(pwd) -w $(pwd) rnix/openssl-gost openssl’
)
При вызове $provider->getAuthorizationUrl()
Получаю ошибку Sign failed as of: Operation failed with code#3 as of: unable to load signing key file
admin
7 Мар 2021Да, текст ключа из блока сертификата от begin до end, тут важно как получали файл с ключом, в статье описано преобразование через lissy
Кирилл
7 Мар 2021Да, я через lissi преобразовывал. Метки BEGIN и END тоже ведь должны присутствовать в ключе или только то, что между ними?
И ещё подскажите пожалуйста, в личном кабинете организации на стороне ЕСИА сертификат нужно загружать в формате crt или cer?
admin
8 Мар 2021Да, метки должны присутствовать, в личном кабинете ЕСИА загружается оригинальный сертификат — cer
Юрий
20 Фев 2022>> про особенности использования тестового режима и рабочего писать не буду, об этом уже много сказано, но сначала делается на тестовых данных. Тестовые параметры подключения узнаете у заказчика и гос услуг.
Спасибо за статью. Подскажите, где можно посмотреть про особенности тестового режима?
Заказчик прислал для тестового доступа ровно аналогичные по структуре папки, аж 3 штуки (каждая содержит header.key, masks.key, masks2.key, name.key, primary.key, primary2.key + сертификат).
КриптоПро при этом может быть на кого угодно зарегистрирована или на ту компанию, на которую выдан ключ?
admin
23 Фев 2022Описание как использовать тестовый режим есть на портале гос услуг, также уточняются параметры у заказчика, и есть примеры тестового режима с описанием в исходниках библиотеки ekapusta. По регистрации крипто про не могу сказать, так как ее приходилось обходить (ее алгоритмы не подходили).