检查签名在WS*服务器实现



我想在php实现的soap服务器上验证soap请求的签名。

服务器代码:

$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总是false。我不知道是否因为键加载错误或实际上无效。我能找到的关于用PHP实现SOAP服务器的信息很少,也没有关于实现依赖于检查签名请求的SOAP服务器的信息。

  1. 我的客户端与一个远程web服务对话并得到一个确认。

  2. 那么远程服务器需要一些时间来处理我的请求。

  3. 远程客户端(我无法控制)然后向我的服务。

最后一步是我在验证签名

时遇到问题的地方

无论如何,你的第一种方法看起来很好,我的服务器有相同的结构。不幸的是,WSSESoapServer没有从SoapServer继承,因此不是真正的SoapServer,而是SoapSignatureValidator,应该像那样调用。纠正这种行为是很容易的,不需要单独的SoapServer实例(应该是透明的和自动的)。

<?php
require 'soap-server-wsse.php';
try {
    // get soap message
    $xmlSoap = DOMDocument::load('php://input');
    // validate signature
    $validateSignature = new WSSESoapServer($xmlSoap);
    if(!$validateSignature->process())
        file_put_contents("log.txt", "soapserver: SIGNATURE VALIDATION ERROR - CONTINUING WITHOUT SIGNATUREn", FILE_APPEND);
        //throw new Exception('Invalid Signature'); # this would cancel the execution and not send an answer
    $sServer = new SoapServer($wsdl);
    // actually process the soap message and create & send answer
    //$sServer->setClass() or setObject() or set setFunction()
    $sServer->handle($validateSignature->saveXML());
} catch (Exception $fault) {
    file_put_contents("log.txt", "soapserver soapfault: ".print_r($fault, true), FILE_APPEND);
}
?>

相关内容

  • 没有找到相关文章

最新更新