мы хотим создать клиент веб-сервиса PHP WSO2, который использует WS Security, но без подписи и шифрования. Вместо этого мы хотим использовать простой пароль. Проблема в том, что мы всегда получаем ошибку сертификата (см. Ниже). Нужно ли устанавливать сертификат, и если да, то где? Java Keystore?
Среда: 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] Ошибка построения заголовка безопасности.
[error] phase.c (224) Ошибка вызова обработчика RampartOutHandler в фазе безопасности
[error] engine.c (657) Фаза запуска Ошибка безопасности
PHP-код:
<code> <?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 '
';
} catch (исключение $ e) {
echo '
Ошибка:
'. PHP_EOL;
var_dump ($ е);
}
// сбросить параметры мыла
echo '
Параметр мыла
'. PHP_EOL;
var_dump ($ soapPayload);
// сбросить мыльный ответ
echo '
Soap-Response
'. PHP_EOL;
var_dump ($ soapResponse);