Пробую сделать авторизацию через Госуслуги. Порядок подключения сайта понятен. Непонятно как работать с сертификатами.
Посмотрел несколько примеров реализации как на PHP (например https://github.com/fr05t1k/esia), так и на других языках.
Везде идет речь о сертификате (1 файл), о закрытом ключе (1 файл) и пароле к закрытому ключу (строка).
Что я имею из этого:
Пароль к закрытому ключу
Некие сертификаты, общедоступные по ссылке http://esia.gosuslugi.ru/public/esia.zip Я так понимаю что из них мне нужен только один, в зависимости от типа подписи.
Файлы, которые прислал заказчик (он же регистрировал сайт на Госуслугах).
Файлы от заказчика содержат один файл с расширением cer
(Еще один сертификат?) и папку с несколькими файлами с расширением key
(header.key, masks.key, primary.key и тд)
Вопросы: Как мне эти данные использовать? Какой из сертификатов мне нужен? Какой из файлов key - закрытый ключ? Или мне надо произвести какие-то действия и сгенерить из них закрытый ключ?
Разобрались в ситуации.
В итоге ключи, что прислал клиент (6 закрытых и 1 сертификат) могут быть импортированы только в криптопро. И работать с ними можно только с ПО криптопро (https://www.cryptopro.ru/). С их ПО получается только подписывать файлы, запросы - нет. Плюс это платно.
В итоге нашли докер контейнер, который умеет работать с ГОСТ шифрованием (https://github.com/rnixik/docker-openssl-gost/tree/master/php-fpm-gost). Сделали для него простой rest api для проксирования запросов к ЕСИА с использованием библиотеки (https://github.com/ekapusta/oauth2-esia)
Для работы с этой библиотекой необходимо преобразовать ключ и сертификат.
Ключ преобразовали с помощью этого https://github.com/garex/nodejs-gost-crypto Сертификат преобразовали с помощью этого https://ssl4less.ru/faq/ehniceskie-voprosy/onvertirovanie-sertifikatov-pem-p7b-pfx-der.html
Везде идет речь о сертификате (1 файл), о закрытом ключе (1 файл) и пароле к закрытому ключу (строка)
Для обмена с ЕСИА потребуется шифрование, поэтому у вас должен быть свой RSA-ключ для подписи. Закрытый ключ находится у вас, публичный сертификат выгружается в кабинет ЕСИА.
Некие сертификаты, общедоступные по ссылке http://esia.gosuslugi.ru/public/esia.zip
Поскольку ЕСИА тоже будет присылать вам шифрованную информацию, то вам потребуется публичный сертификат ЕСИА, чтобы расшифровать эту информацию.
Файлы от заказчика содержат один файл с расширением cer
Скорей всего - это публичный сертификат. Можете попробовать его открыть. В windows должно открыться стандартное окно с информацией о сертификате.
и папку с несколькими файлами с расширением key (header.key, masks.key, primary.key и тд)
А вот тут сказать сложно. Похоже, что клиент сгенерировал ключ на флешке средствами крипто-про или наподобие, а потом просто скопировал каталог. Вот тут он не прав. Надо выяснять конкретные требования заказчика по интеграции
Для авторизации через госуслуги можно использовать, например, самоподписанные сертификаты:
Сначала создать закрытый ключ и запрос на сертификат
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr -sha256
в процессе генерации будет запрос на воод пароля к закрытому ключу.
Потом выпустить публичный сертификат для него
openssl x509 -signkey domain.key -in domain.csr -req -days 1825 -out domain.crt -sha256
у вас будет два файла domain.key (закрытый ключ) и domain.crt (сертификат). Сертификат потом надо будет выгрузить в кабинет ЕСИА.
Как мне эти данные использовать?
Очень помог в интеграции с ЕСИА пакет https://github.com/ekapusta/oauth2-esia Описание работы с ним https://habr.com/ru/post/358834/
Кстати, если посмотрите тесты на гитхабе, то найдете там мнемонику для тестовой организации и готовые ключи для нее. Можно будет протестировать.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Столкнулся со следующей проблемой: когда изменяю права/роли у пользователя, то ему необходимо перезайти в свой аккаунт, чтобы они обновилисьМожно...
Я так понимаю, хорошим тоном является под каждый вид исключения делать свой собственный класс
Нужно удалить все файлы и папки рекурсивно на сервереДоступ по FTP
Есть примерно 80 таблиц с данными по которым идёт поиск значений через foreach, и пока он идёт успевает пройти секунд 10-15 так как много таблиц,...