lest, just lest

Заметки о web-разработке, администрировании Linux и настройке Mac OS X

PHP Soap client и WS-Security

1 комментарий

Для того, чтобы отправить soap-запрос с цифровой подписью, можно конечно использовать extension WSF и переделывать все свои запросы, основанные на SoapClient.

Но есть и вариант попроще с использованием библиотеки soap-wsse:

require_once('soap-wsse.php');

class SecuredSoapClient extends SoapClient {
  public function __doRequest($request, $location, $action, $version, $one_way = 0) {
    $doc = new DOMDocument('1.0');
    $doc->loadXML($request);

    $pem = file_get_contents('client.pem'); // файл с сертификатом и private ключом

    $wsse = new WSSESoap($doc);

    // добавляем в запрос сертификат
    $bin_token = $wsse->addBinaryToken($pem);

    // получаем private ключ для подписи
    $sec_key = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'private'));
    $sec_key->loadKey($pem);

    // добавляем цифровую подпись в запрос
    $wsse->signSoapDoc($sec_key);

    // добавляем в цифровую подпись ссылку на сертификат
    $wsse->attachTokentoSig($bin_token);

    return parent::__doRequest($wsse->saveXML(), $location, $action, $version, $one_way);
  }
}

Используя класс SecuredSoapClient вместо SoapClient, запросы будут отправляться уже с цифровой подписью.

No related posts.

Автор: lest

Ноябрь 15, 2009 в 22:43

Опубликовано в php

Метки: , ,

One Response to 'PHP Soap client и WS-Security'

Subscribe to comments with RSS or TrackBack to 'PHP Soap client и WS-Security'.

  1. имеется только сертификат с публичным ключем от шлюза с WS-Security протоколом. Этот метод требует еще приватный ключ. Как быть?

    mc

    13 Май 11 at 14:32

Leave a Reply