lest, just lest

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

Archive for the ‘php’ Category

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, запросы будут отправляться уже с цифровой подписью.

Автор: lest

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

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

Метки: , ,