мы хотим создать клиент веб-сервиса PHP WSO2, который использует WS Security, но без подписи и шифрования. Вместо этого мы хотим использовать простой пароль. Проблема в том, что мы всегда получаем ошибку сертификата (см. ниже). Нужно ли нам действительно устанавливать сертификат, и если да, то где? Хранилище ключей Java?
Среда: PHP 5.3.10, WSO2 PHP 2.10, Apache 2.2.x
wfs_client_log:
[ошибка] key_mgr.c(295) [rampart][rampart_signature] Файл сертификата открытого ключа не указан. [ошибка] Rampart_signature.c(856) [rampart][rampart_signature] Не удается получить сертификат [ошибка] Rampart_sec_header_builder.c(131) [rampart][shb] Не удалось выполнить подпись. ОШИБКА [ошибка] Rampart_sec_header_builder.c(601) [rampart][shb] Ошибка асимметричного связывания [ошибка] Rampart_out_handler.c(130) [rampart]Сбой построения заголовка безопасности. [ошибка] Phase.c(224) Ошибка вызова обработчика RampartOutHandler в фазе безопасности [ошибка] engine.c(657) Ошибка вызова фазы безопасности
PHP-код:
<?php
// Endpoint WebService
$endPoint = 'http://xxx.xxxx.xxx:7000/orabpel/selfservice/passwortAendernMBE/1.0';
// Security-Payload
$user = 'mustermann123';
$passwortAlt = 'foo';
$passwortNeu = 'bar';
// create Security-Token
$secToken = new WSSecurityToken(array(
"user" => $user,
"password" => $passwortAlt,
"passwordType" => "PlainText"));
// create SecurityPolicy
$policy = new WSPolicy(array(
"security" => array(
"useUsernameToken" => TRUE)));
// create WS-Client
$client = new WSClient( array(
"to" => $endPoint,
"useSOAP" => "1.1",
"action" => "process",
"policy" => $policy,
"securityToken" => $secToken));
// create SOAP-Payload
$soapPayload = '
<ns1:passwortAendern_processElement xmlns:ns1="http://xxxx.xxxx.xxxxxe/Integration/prozesse/xxxxxxSchema"
xmlns:ns2="http://xxxx.xxxx.xxx/types/xx.xxx.xxxx.selfService.prozesse.xxx.xxxxMessage">
<ns1:passwortAendernMessage>
<ns2:benutzerkennung>' . $user . '</ns2:benutzerkennung>
<ns2:passwortAlt>' . $passwortAlt . '</ns2:passwortAlt>
<ns2:passwortNeu>' . $passwortNeu . '</ns2:passwortNeu>
</ns1:passwortAendernMessage>
</ns1:passwortAendern_processElement>';
// Request
$soapResponse = null;
try {
// soap Request
$soapResponse = $client->request( $soapPayload );
// print out Response
echo '<pre>';
print_r(htmlspecialchars( str_replace('>','>'.PHP_EOL,$soapResponse->str ) ));
echo '</pre>';
} catch(Exception $e) {
echo '<h1>Error:</h1>' . PHP_EOL;
var_dump($e);
}
// dump Soap-Parameters
echo '<h1>Soap-Parameter</h1>' . PHP_EOL;
var_dump($soapPayload);
// dump Soap-Response
echo '<h1>Soap-Response</h1>' . PHP_EOL;
var_dump($soapResponse);