Код: Выделить всё
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
Вот соответствующий 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);
Вопросы:< /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...
...
Подробнее здесь: https://stackoverflow.com/questions/789 ... -using-php