Как стать автором
Обновить

Комментарии 15

При использовании криптографических алгоритмов GOST первоначальный редирект на ЕСИА получается длиной примерно 5000+ символов. Вы не пытались как-то уменьшить это значение? Некоторым браузерам не нравятся такие длинные ссылки.

Там не пять тыщ, а где-то две. Можно добавить параметр типа "-noattr", сколько-то сэкономит. Пробовал "-nocert", но удалённая система хочет сертификаты в подписи. Поэтому только noattr.

-noattr я использую — без него 5600+ символов получается. Как я понимаю OpenSSL у вас вызывается с вот этими аргументами?
Две тысячи символов у меня только с использованием RSA.


Добавление -nocert уменьшает редирект на 3461 символ, но авторизация тогда не проходит.

Можно попробовать поиграться с самим сертификатом, попытавшись сделать его обрезанную версию. Напр. вот такой тулзой: https://github.com/pornin/DDer


Однако спецификация сертификатов нам говорит, что практически всё в нём required.


Гигантский размер скорее всего связан с utf в subject'е, который никак не поменяешь т.к. отпечаток сертификата/ключа на него завязан.

Добавил подписывателям -noattr в релизе 1.1.2.

Ах да! Никто не требует, чтобы редирект был именно GET'овым.
POST'ом тоже всё прекрасно работает.

А чем POST тут поможет?

Действительно, спасибо.

Расскажите пожалуйста подробнее о параметрах remoteCertificatePath и remoteUrl. remoteUrl по умолчанию какой?

URL — это адрес удалённой системы. По-умолчанию боевой. Чтобы использовать тестовый, подставляете 'https://esia-portal1.test.gosuslugi.ru'.


Сертификат — это публичный сертификат с ключом для проверки подписи токена. По-умолчанию боевой (идёт в комплекте). Я не понимаю, почему минсвязь его в PEM-виде до сих не добавила в методичку. Надеюсь осознают и добавят.


На данный момент по факту только RSA в подписи токена используется, хотя в методичке пишут, что и GOST возможен.


https://github.com/ekapusta/oauth2-esia/blob/5d141d943ac7fef8aac71ca432884ac9fa013768/src/Provider/EsiaProvider.php#L28:L30


protected $remoteUrl = 'https://esia.gosuslugi.ru';
protected $remoteCertificatePath = self::RESOURCES.'esia.prod.cer';
А есть ли разница в сертификате/ключе, сгенеренным для SAML и для OAuth? Через SAML(simplesamlphp) все отлично работает, но закрытый ключ почему-то не подходит для oauth2-esia с руганью openssl_pkey_get_private. Или это openssl ерундит?
За ключ в комплекте отдельное спасибо, не нашел упоминаний в Методических рекомендациях, хотя сама документация написана хорошо.

На сколько я знаю — да. Это два разных мира, хоть и пересекаются местами. И вообще самл депрекейтить собираются — в методичке тоже это написано.


Вот здесь для самла серт лежит (это из методички): https://esia-portal1.test.gosuslugi.ru/idp/shibboleth


Для прода: https://esia.gosuslugi.ru/idp/shibboleth

Если вы используете ключи GOST и скомпилировали PHP с шифрами ГОСТ

подскажите, а как PHP скомпилировать с шифрами ГОСТ?

Также, как openssl с гост, только для php.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации