Искам да проверя подпис за заявка за сапун на сървър за сапун, внедрен в php.
Кодът на сървъра:
$Server = new SoapServer();
$d = new DOMDocument();
$d->load('php://input');
$s = new WSSESoapServer($d);
try {
if($s->process()) {
// Valid signature
$Server->handle($s->saveXML());
} else {
throw new Exception('Invalid signature');
}
} catch (Exception $e) {
echo "server exception: " . $e;
}
Грешката:
exception 'Exception' with message 'Error loading key to handle Signature' in /<path>/wse/src/WSSESoapServer.php:146
Внедрих клиент за подписване на SOAP заявки, използвайки тази библиотека: https://github.com/robrichards/wse-php. Няма примери за внедряване на сървъра...
Как да заредя публичния ключ за проверка на подписа?
[Редактиране] Вече успях да заредя предоставения ключ с помощта на
$key = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'public'));
$key->loadKey(CERT, true);
Вече не получавам съобщение за грешка при валидиране на подписа:
$x = new XMLSecurityDSig();
$d = $x->locateSignature($soapDoc);
$valid = $x->verify($key);
Въпреки това, $valid винаги е невярно. Нямам представа дали е защото ключът е зареден грешно или всъщност е невалиден. Мога да намеря много малко информация за внедряване на SOAP сървър с PHP и никаква информация за внедряване на SOAP сървър, който разчита на проверка на подписана заявка.
ПОЯСНЕНИЕ
Клиентът ми говори с отдалечена уеб услуга и получава потвърждение.
След това отдалеченият сървър отнема известно време, за да обработи заявката ми.
След това отдалечен клиент (над който нямам контрол) отправя заявка към моята услуга.
Последната стъпка е мястото, където имам проблеми с проверката на подписа