Проблемы с подписью XML с помощью RSASSA-PSS (SHA256-RSA-MGF1) с использованием PHPPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблемы с подписью XML с помощью RSASSA-PSS (SHA256-RSA-MGF1) с использованием PHP

Сообщение Anonymous »

Я пытаюсь подписать XML-документ, используя алгоритм RSASSA-PSS (SHA256-RSA-MGF1) в PHP. Я создал сертификат с помощью следующей команды OpenSSL:

Код: Выделить всё

openssl req -newkey rsa-pss -new -nodes -x509 -days 3650 -pkeyopt rsa_keygen_bits:4096 -sigopt rsa_pss_saltlen:32 -keyout key.pem -out cert.pem
После создания сертификата и закрытого ключа я попытался подписать XML-документ с помощью библиотеки robrichards/xmlseclibs. Однако когда я связываю с , я сталкиваюсь с ошибкой дайджеста, и проверка подписи завершается неудачей. И оказывается, что библиотека не поддерживает этот алгоритм.
Вот соответствующий PHP-код:

Код: Выделить всё

$objDSig = new XMLSecurityDSig();

$objDSig->setCanonicalMethod(XMLSecurityDSig::C14N);
$objDSig->addObject($dip,null,null);
$objDSig->addReference(
$xmlDoc,
XMLSecurityDSig::SHA256,
array('http://www.w3.org/2000/09/xmldsig#enveloped-signature')
);

//XMLSecurityKey::RSASSA_PSS custom code jochen-jung using phpseclib/phpseclib
$objKey = new XMLSecurityKey(XMLSecurityKey::RSASSA_PSS, array('type'=>'private'));
$objKey->loadKey($this->primary_key, TRUE);
$objDSig->sign($objKey);
$objDSig->add509Cert(file_get_contents($this->certificate), true, false, ['subjectName'=>true]);
$objDSig->appendSignature($xmlDoc->documentElement);
Я уже понял, что расширение ext-openssl в PHP не полностью поддерживает этот алгоритм, поэтому я перешел на phpseclib. Я наткнулся на код Йохена Юнга https://github.com/robrichards/xmlseclibs/pull/262, который, похоже, работает, но я не могу повторить успех.
Вопросы:< /p>

[*]Кто-нибудь успешно подписал XML-документ с использованием RSASSA-PSS (SHA256-RSA-MGF1) на PHP?
[*] есть ли какие-либо известные проблемы с phpseclib для этого конкретного случая использования?
[*]Существует ли конкретный подход или библиотека, которую мне следует использовать, чтобы гарантировать, что подпись пройдет проверку?
< /ol>
Я обнаружил, что проверка дайджеста проходит успешно, если URI в элементе представляет собой пустую строку, например URI="". Однако когда я использую что-то вроде URI="#pfx784add6d-1227-7ac4-10a0-ce5532815998", я сталкиваюсь с проблемами.
Несмотря на это, никогда не прошел проверку с помощью валидатора цифровой подписи Chilkat XML. Я ожидал, что если дайджест-проверка пройдет, то и подпись тоже пройдет, но этого не произошло.

Код: Выделить всё






47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=


OrCZl+uY69KxnSQnoXw3...


TEST
MIIGWTCCBBGgAwIBAgIUPqVSOTIBUtd6BkNxaEsusYuKEZAwPQYJKo...



...


Кто-нибудь смог подписать XML-документы с помощью этого алгоритма?

Подробнее здесь: https://stackoverflow.com/questions/789 ... -using-php
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»