Voglio verificare una firma per una richiesta soap su un server soap implementato in php.Verifica firma nell'implementazione server WS *
Il codice del server:
$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;
}
L'errore:
exception 'Exception' with message 'Error loading key to handle Signature' in /<path>/wse/src/WSSESoapServer.php:146
ho implementato un client di firmare richieste SOAP che utilizzano questa libreria: https://github.com/robrichards/wse-php. Non ci sono esempi su come implementare il server ...
Come caricare la chiave pubblica per controllare la firma?
[Edit] Ho ormai in grado di caricare la chiave in dotazione utilizzando
$key = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'public'));
$key->loadKey(CERT, true);
Non sono più ottenendo un messaggio di errore durante la convalida della firma:
$x = new XMLSecurityDSig();
$d = $x->locateSignature($soapDoc);
$valid = $x->verify($key);
Tuttavia, $ valida è sempre falso Non ho idea se è perché la chiave è stata caricata in modo errato o non è effettivamente valida. Posso trovare pochissime informazioni sull'implementazione di un server SOAP con PHP e nessuna informazione sull'implementazione di un server SOAP che si basa sul controllo di una richiesta firmata.
CHIARIMENTO
miei client comunica con un servizio Web remoto e ottiene un riconoscimento.
Quindi il server remoto impiega del tempo per elaborare la mia richiesta.
Un client remoto (di cui non ho il controllo) effettua quindi una richiesta al servizio .
L'ultimo passo è dove ho problemi con la verifica della firma
Mi sembra che WSSESoapServer rilevi e convalidi automaticamente le firme all'interno di un messaggio soap. Quindi il tuo primo approccio dovrebbe essere ok, non dovresti aver bisogno di caricare manualmente una chiave o verificare. Ma: WSSESoapServer richiede che il messaggio soap firmato includa la firma E la chiave pubblica per verificare la firma. – smat88dd
Sei ancora interessato a una soluzione o potresti aggiustarla da solo? Ho configurato un client e un server di test e ho potuto postarlo come risposta! Ad ogni modo, potrei farlo funzionare, il server wsse sta convalidando le firme senza errori. – smat88dd
@ smat88dd Penso che il mio ultimo montaggio l'abbia risolto caricando la firma. Non ho alcun controllo sul cliente che effettua la richiesta.Penso che la chiave pubblica che ho potrebbe non essere valida perché sempre valuta false. Se la tua soluzione è diversa dalla mia, mi piacerebbe comunque vederla. Se solo per avere * qualche * documentazione a cui fare riferimento. – soulfreshner