сертефикаты https ssl xml-gfrtns

antonim

Новичок
сертефикаты https ssl xml-gfrtns

разрабатываю систему платежей. Проблема в том, что сервер работает через xml-запросы которые передаются через https ssl шлюз, после получения сертификата. Сертификат встраивается в браузер, но мне нужно чтобы с сервером работал скрипт на сервере, а не браузер. Как из скрипта получить сертификат я не знаю :(
 

antonim

Новичок
прошел процедуру получения сертификата и установил его в браузер. Как его взять и в каком виде с ним работать не знаю.
 

FractalizeR

Новичок
Автор оригинала: antonim
прошел процедуру получения сертификата и установил его в браузер. Как его взять и в каком виде с ним работать не знаю.
C curl работали? CURLOPT_CAINFO посмотрите.
 

antonim

Новичок
Crys спасибо, повел меня в правильном направлении.

экспортировал полученный сертефикат в файл *.pfx но для работы с пхп неределал его в формат *.pem через шел:
openssl pkcs12 -in *.pfx -out *.pem

после сделал так:

$context = stream_context_create($opts);
$result = stream_context_set_option($context, 'ssl', 'local_cert', 'keys.pem');
$result = stream_context_set_option($context, 'ssl', 'passphrase', 'pass');

$fp = fsockopen ("ssl://adress", 443, $errno, $errstr, 30, $context);

но ругается Warning: fsockopen() expects at most 5 parameters, 6 given

Вычитал что этот параметр доступен только начиная с версии 5.3.0

Админ поставил PHP Version 5.3.0-0.dotdeb.8

Но ошибка выдается та же.... может кто подскажет??
 

FractalizeR

Новичок
Прошу прощения за настойчивость, но почему бы не воспользоваться curl?
 

FractalizeR

Новичок
Автор оригинала: antonim
$fp = fsockopen ("ssl://adress", 443, $errno, $errstr, 30, $context);

но ругается Warning: fsockopen() expects at most 5 parameters, 6 given

Вычитал что этот параметр доступен только начиная с версии 5.3.0

Админ поставил PHP Version 5.3.0-0.dotdeb.8

Но ошибка выдается та же.... может кто подскажет??
Где это вы вычитали эту ерунду?
http://us.php.net/fsockopen - тут нет ничего похожего.

см. stream_context_set_XXX
 

antonim

Новичок
Автор оригинала: FractalizeR
Где это вы вычитали эту ерунду?
http://us.php.net/fsockopen - тут нет ничего похожего.

см. stream_context_set_XXX
по твоей ссылке в поиске найти "16-Mar-2004 07:07" и все увидишь.

Знач так.. получилось, воспользовавшись функцией stream_socket_client, флаг ставить - STREAM_CLIENT_PERSISTENT

cURL не делаю т.к. админ говорит что криво стоит на сервере он, ну и сказал что на нем лучше не делать, не знаю почему...
 

Dreammaker

***=Ф=***
antonim, чисто теоретически лучше не делать на сокетах, а делать с помощью курла, который предоставляет функционал в более удобной обёртке.
 

FractalizeR

Новичок
Автор оригинала: antonim
по твоей ссылке в поиске найти "16-Mar-2004 07:07" и все увидишь.
Во-первых, с какой стати я должен верить всему, что написали обычные юзеры в комментах к странице мануала? А во-вторых по моей ссылке найди в поиске "29-Apr-2009 01:45" и все увидишь.
 

antonim

Новичок
Автор оригинала: FractalizeR
Во-первых, с какой стати я должен верить всему, что написали обычные юзеры в комментах к странице мануала? А во-вторых по моей ссылке найди в поиске "29-Apr-2009 01:45" и все увидишь.
FractalizeR пользователь, коммент которого нашли вы оказался умнее того, коммент которого прочел я :)

теперь столкнулся с проблемой, когда записываю в пото данные (для этого функцию сделал:

PHP:
function fwrite_stream($fp, $string) {
    for ($written = 0; $written < strlen($string); $written += $fwrite) {
        $fwrite = fwrite($fp, substr($string, $written));
        if (!$fwrite) {
            return $fwrite;
        }
    }
    return $written;
}
) возвращает что записано 0 байт :( я ставил и stream_set_blocking ($fp,0);

все бес толку.
 

antonim

Новичок
Автор оригинала: FractalizeR
Полный код, пожалуйста.
PHP:
$opts = array(
  'https'=>array(
    'method'=>"POST",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n"
  )
);


$context = stream_context_create($opts);
$result = stream_context_set_option($context, 'ssl', 'local_cert', 'keys.pem');
$result = stream_context_set_option($context, 'ssl', 'passphrase', 'pass');



$fp = stream_socket_client ("ssl://.$host.gate.asmx:443", $errno, $errstr, 30, STREAM_CLIENT_PERSISTENT, $context);
stream_set_blocking  ($fp,0);

if (!$fp) {
    echo "ERROR: $errno - $errstr<br>\n";
    die('Could not open socket');
} else {
		
	
    $request ="POST /postHandler.php HTTP/1.0\r\n";
    $request.="Host: $adress\r\n";
    $request.="Content-Type: application/x-www-form-urlencoded\r\n";
    $request.="Content-Length: 7\r\n";
    $request.="\r\n\r\n";
    $request.="foo=bar"; 
	
 
    $fwrite =  fwrite($fp,$request,strlen($request));
    var_dump($fwrite);
	
    echo "<br><h2>request:</h2>".htmlspecialchars($request)."<br><br>";
    var_dump ($fp);

    while (!feof($fp))
      $response.=fread($fp,8192);
    fclose($fp);
}
 

FractalizeR

Новичок
Так. Я ступил, конечно, когда предложил использовать один вызов fwrite. Режим доступа все же неблокирующий. Но и ваш код, который ее в цикле вызывает - очень странный вариант. stream_select, я думаю, тут самое то. Кстати, вообще не видно, чтобы ваш код использовал возможности, предоставляемые неблокирующими сокетами. В чем тут фишка?

У вас какая версия PHP? Обратите внимание на вот этот баг: http://bugs.php.net/bug.php?id=36796
 

findnext

Новичок
может я чего и недопонял но для этого существует http://www.php.net/openssl
 
Сверху