Я хочу проверить подпись для запроса мыла на сервере мыла, реализованном на 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. Нет примеров, как реализовать сервер ...
Как загрузить открытый ключ для проверки подписи?
[Edit] Теперь я могу загрузить предоставленный ключ, используя
$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-сервера, который полагается на проверку подписанного запроса.
УТОЧНЕНИЕ
Мой клиент обращается к удаленной веб-службе и получает подтверждение.
Затем удаленному серверу требуется некоторое время для обработки моего запроса.
Затем удаленный клиент (которого я не могу контролировать) делает запрос в мою службу.
На последнем этапе у меня возникают проблемы с проверкой подписи.