зная текущего клиента в конце службы в WSO2 - PullRequest
1 голос
/ 23 августа 2011

Я застрял в одном месте при написании веб-службы с использованием wso2 / php.Я хочу использовать безопасный Мтом.При использовании шифрования или подписи, как мне узнать, какой публичный сертификат клиента использовать в маркере безопасности ???Или я должен попробовать сопоставить все существующие публичные сертификаты клиента?

Мне нужно знать, кто является текущим пользователем.Поскольку услуга зависит от клиента.Пожалуйста, помогите ... его срочно:)

С уважением Charanjeet Kaur

1 Ответ

2 голосов
/ 14 июня 2012

Я знаю, что уже немного поздно, но я сталкивался с тем же вопросом.Почему-то это запутанная тема (возможно, из-за отсутствия точной документации).При настройке службы по коду (вместо использования файла политики) вы весьма ограничены.Вот что я нашел:

Когда клиент только подписывает сообщение, он прикрепляет свой сертификат в качестве токена безопасности (wsse: binarysecuritytoken) в заголовке.Сервер берет этот сертификат и использует его для проверки подписи.Итак, вам необходимо указать:

в клиенте: сертификат клиента и закрытый ключ.

в сервисе: сертификат службы и закрытый ключ (берет сертификат клиента из заголовка).

Когда клиент подписывает и шифрует сообщение, клиент шифрует сертификат сервера, а такжеотправляет свой сертификат, чтобы сервер мог проверить подпись и выполнить шифрование.Здесь служба использует сертификат из заголовка для шифрования ответа.Таким образом, вам нужно только указать:

в клиенте : сертификат клиента и закрытый ключ, а также сертификат сервера.

на сервере : сертификат сервера и закрытый ключ (берет сертификат клиента из заголовка).

Когда клиент только шифрует сообщение, он не отправляетего сертификат в запросе, поэтому необходимо указать клиентский сертификат в сервисе.

в клиенте: сертификат клиента и закрытый ключ, а также сертификат сервера.

на сервере: сертификат сервера, закрытый ключ и сертификат клиента.

Итак, в первом случае вам не нужно указывать свойсертификат клиента, и вы можете взять его из заголовка запроса и выполнить дальнейшую обработку, если вам нужно аутентифицировать пользователя (возможно, проверьте его по некоторым предварительно выданным сертификатам).В последнем случае я не мог найти способ обойти (возможно, с использованием политик xml).

Чтобы получить сертификат в php, вам нужно иметь дело с пространствами имен (аппаратный) код будет примерно таким(внутри вашей функции ответа):

$xml = simplexml_load_string($inMessage->outputHeaders[3]->str,  NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/");
$ss= $xml->children("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")
    ->BinarySecurityToken;

предупреждение !!outputHeaders [3] не является безопасным способом получить заголовок безопасности !!Это просто, чтобы показать простой способ получить сертификат клиента.

...