Как сделать сертификат в OpenSSL для работы с php? - PullRequest
0 голосов
/ 05 января 2011

Недавно я решил добавить опцию оплаты через банклинк для моего php-магазина, и после прочтения спецификаций реализации все выглядит хорошо, но суть в 1.Все обмены открытыми ключами (сертификатами) осуществляются в формате X509.Теперь, что означает этот последний и чем он отличается от обычного файла .pem, защищенного паролем?Также с обычным паролем .pem-файлом я не могу использовать функцию php, такую ​​как openssl_verify(), подписанная функцией openssl_sign().

Могу ли я получить здесь несколько советов, пожалуйста, поскольку банк, предлагающий этот способ оплаты, имеет очень мало информации оэто и я абсолютно новичок в этом.

Так что процедура, которую мне нужно сделать здесь, это сгенерировать для них request.pem и отправить его им.После этого они подпишут это или что-то еще, что я не знаю, и я смогу использовать это в своем заявлении.

Пожалуйста, скажите мне, если моей информации недостаточно, потому что, как я сказал, я не знаю много, когда вприходит к сертификатам или openssl.

Ответы [ 4 ]

1 голос
/ 23 июля 2013

Честно говоря, возможности OpenSSL в PHP ужасны. Лучше всего, если вы выберете отличный пакет типа phpseclib .

1 голос
/ 05 января 2011

Вы должны использовать концепцию curl.

curl_setopt($ch, CURLOPT_SSLCERT,'CA.pem');
1 голос
/ 05 января 2011

Файл PEM содержит зашифрованное и закодированное в base64 значение «сырого» сертификата / личного ключа, поэтому функции, которые работают с PEM, должны также работать с необработанными сертификатами. OpenSSL должен иметь возможность конвертировать из одного формата в другой.

0 голосов
/ 06 января 2011

Давным-давно я делал нечто подобное. Разница в том, что они просто дали мне файл pem, и я использовал его для подключения к их серверу.

Ниже я написал свою подсказку для вас. :)

  1. Создание myreq.pem с помощью инструмента openssl.
  2. Отправьте им myreq.pem и получите подписанный сертификат ca.pem.
  3. Используйте ca.pem в PHP, как показано ниже.

$context = stream_context_create();
stream_context_set_option($context, 'ssl', 'verify_peer', false); //or can be true
stream_context_set_option($context, 'ssl', 'cafile', "ca.pem");
stream_context_set_option($context, 'ssl', 'local_cert', "ca.pem");
stream_context_set_option($context, 'ssl', 'passphrase', 'your pem file password');
//instead tls can be ssl, sslv3, sslv2 depending requirements, 10 is timeout
$sock = stream_socket_client("tls://host:port", $errno, $errstr, 10, STREAM_CLIENT_CONNECT, $context); 
fwrite($sock, "Hi server\r\n");
$strResponse;
while(!feof($sock)) { $strResponse = $strResponse . fgets($sock, 1024); }
fclose($s);
echo $strResponse;
...