2009-12-17 2 views
2

Я новичок в php, и мне нужно пройти аутентификацию на сервере SSO. Сервер SSO является .Net, используя сертификат SSL.Декодирование ответа HTTP с сертификатом

Когда я возвращаюсь с сервера SSO, ответ кодируется. У меня есть ключ сертификата, конечно, но как я могу расшифровать ответ?

Это очень расплывчато для меня, не стесняйтесь подробно ответ :)

Большое спасибо заранее за вашу помощь, наилучшими пожеланиями

+0

Если ответ SSO на SSL/HTTPS, не требуется расшифровать ответ. Можете ли вы дать какой-то код и указать, что вы ожидаете, и что он не делает. – Gordon

+0

Также вы можете указать название продукта сервера SSO или любую дополнительную информацию об этом. – Gordon

ответ

7

Вы можете использовать http/ssl stream wrapper, чтобы позволить PHP прозрачно обрабатывать часть ssl.

Давайте начнем с простого:

$c = file_get_contents('file.txt'); 

Нет обертка не задан, поэтому файл: // используется по умолчанию. file:// wrapper пытается открыть локальный файл file.txt и file_get_contents() считывает данные из этого потока.

Следующий шаг: HTTP-обертка

$c = file_get_contents('http://docs.php.net/fopen'); 

Теперь указывается обертка. http-wrapper делает запрос для h ttp: //docs.php.net/fopen и возвращает результат как поток, из которого file_get_contents() все свои данные.

Вы также можете использовать http s, если включена поддержка ssl (см. Также http://docs.php.net/openssl).

$c = file_get_contents('https://developer.mozilla.org/en/gecko_dom_reference'); 

Дополнительно: клиент/сервер аутентификации
Вы можете прикрепить context to a php stream позволяет установить параметры/параметр для вовлеченных потока оберток.
E.g. http-wrapper принимает параметр http.user_agent при отправке HTTP-запроса на сервер. Итак, если вы хотите, чтобы сервер «верить», что конкретная версия Firefox делает запрос на документ, и вы можете сделать что-то вроде

$context = stream_context_create(
    array(
    'http'=>array('user-agent'=>'Mozilla/6.0 (Windows; U; Windows NT 7.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.9 (.NET CLR 3.5.30729)') 
) 
); 
$c = file_get_contents('http://docs.php.net/fopen', 0, $context); 

При выполнении запроса по протоколу HTTPS как http и в ssl варианты являются использованные

$context = stream_context_create(
    array(
    'http'=>array( ...http-wrapper options here), 
    'ssl'=>array( ...ssl-wrapper options here) 
) 
); 

Возможно, сервер https требует аутентификации, прежде чем разрешить доступ к ресурсу. Сертификат клиента должен быть отправлен с запросом, и сервер решает, приемлемо это или нет. Параметр контекста ssl.local_cert позволяет указать сертификат клиента, который используется в запросе. Файл сертификата может быть защищен паролем. В этом случае вы должны ввести пароль, как ssl.passphrase

$context = stream_context_create(
    array(
    'ssl'=>array(
     'local_cert'=>'xyz/VolkerCA/UserVolker.pem', 
     'passphrase'=>'my secret passphrase' 
    ) 
) 
); 
$c = file_get_contents('https://hermes..../ssl/test.php', 0, $context); 

С другой стороны, вы могли бы (и) хотите, чтобы убедиться, что сервер действительно является то, что она претендует быть. Как принято решение о том, является ли (серверный) сертификат приемлемым/действительным/заслуживающим доверия, немного отличается от этого сообщения. http://docs.php.net/book.openssl
Установите ssl.verify_peer = true и передайте информацию, где можно найти данные проверки как ssl.cafile

$context = stream_context_create(
    array(
    'ssl'=>array(
     'local_cert'=>'xyz/VolkerCA/UserVolker.pem', 
     'passphrase'=>'my secret passphrase', 
     'verify_peer'=>true, 
     'cafile'=>'xyz/VolkerCA/VolkerCA.pem' 
    ) 
) 
); 
$c = file_get_contents('https://hermes..../ssl/test.php', 0, $context);