веб-сервисы — Как подписать SOAP-сообщение в переполнении стека

я использую php (yii2) и я хотел бы реализовать SOAP-связь с сервером. У меня есть следующее руководство по SOAP:

Система Клиента использует личный ключ Клиента для выдачи
цифровые подписи. Оба запроса приложения (ApplicationRequest)
и сообщение SOAP должно быть подписано отдельно в WSC.
подпись выполняется с помощью закрытого ключа. Система подписи должна
включите в подпись также сертификат. Этот сертификат
содержит открытый ключ, соответствующий закрытому ключу, используемому в
подписание. Получатель использует открытый ключ для аутентификации
подпись.

а также:

Следующий шаг: цифровая подпись (отдельный тип цифровой подписи XML)
все сообщение SOAP с закрытым ключом сертификата отправителя и положить
подпись в SOAP-заголовок

Итак, у меня есть собственный private.key, public.key а также certificate.cer

Мой код выглядит

    $client = new SoapClient($wdsl, ['trace' => true]);
$arguments = ['DownloadFileListRequest' => $dflr];
$appResponse = $client->__call('downloadFileList', $arguments);

Но я получаю ожидаемую ошибку:

SOAP signature error

Что я должен сделать и как подписать это SOAP?

0

Решение

XMLSecurityDSig помог (https://github.com/robrichards/xmlseclibs)

$dom = new DOMDocument('1.0', 'UTF-8');
$ar = $dom->createElementNS('http://bxd.fi/xmldata/', 'ApplicationRequest');
$dom->appendChild($ar);
$ar->appendChild($dom->createElement('CustomerId', $this->userID));
...
$ar->appendChild($dom->createElement('Content', $contentBase64));

$objDSig = new XMLSecurityDSig();
$objDSig->setCanonicalMethod(XMLSecurityDSig::EXC_C14N);
$objDSig->addReference(
$dom,
XMLSecurityDSig::SHA256,
['http://www.w3.org/2000/09/xmldsig#enveloped-signature'],
['force_uri' => true]
);
$objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA256, ['type'=>'private']);
$objKey->loadKey($this->privateKeyPath, true);
$objDSig->sign($objKey);
$objDSig->add509Cert(base64_encode(file_get_contents($this->certificatePath)), false);
$objDSig->appendSignature($dom->documentElement);

$xmlRaw = $dom->saveXML();
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector