- Автор темы
- #1
Всем привет. Помогите решить задачу аутентификации по Сертификатам открытых ключей.
Данные которые есть:
Коммуникационные соединения через сеть интернет защищаются с помощью криптографического протокола TLS версии не ниже 1.0 c использованием аутентификации по Сертификатам открытых ключей.
При соединении по протоколу TLS разрешены только следующие стойкие криптографические алгоритмы.
Ассиметричное шифрование: алгоритм RSA с минимальной длиной ключа 2048 бит.
Обмен ключами: алгоритм Диффи-Хеллмана (англ. Diffie-Hellman, DH).
Цифровая подпись: алгоритм DSA.
Симметричное шифрование: алгоритмы TripleDES, AES128, AES256 с режимом шифрования CBC (англ. Cipher Block Chaining).
Получение хэш-функций: алгоритмы SHA-1, SHA-2.
При соединении Платёжный шлюз проверяет сертификат и разрешенные криптографические параметры.
Прикладные данные, обслуживающие запросы, передаются между Платёжным шлюзом и ИС ТСП в виде XML-сообщений по протоколу HTTP (сontent-type: text/xml) методом POST.
Передаваемые данные имеют кодировку UTF-8.
Что вышло сделать:
Проверка ключа платежного шлюза проходит (CURLOPT_SSL_VERIFYHOST, CURLOPT_SSL_VERIFYPEER) - это обязательное условие. А с моей стороны сертификат не передается для аутентификации, куда дальше копать уже не знаю. Прошу помочь или натолкнуть на мысль, что тут не хватает?
Данные которые есть:
Коммуникационные соединения через сеть интернет защищаются с помощью криптографического протокола TLS версии не ниже 1.0 c использованием аутентификации по Сертификатам открытых ключей.
При соединении по протоколу TLS разрешены только следующие стойкие криптографические алгоритмы.
Ассиметричное шифрование: алгоритм RSA с минимальной длиной ключа 2048 бит.
Обмен ключами: алгоритм Диффи-Хеллмана (англ. Diffie-Hellman, DH).
Цифровая подпись: алгоритм DSA.
Симметричное шифрование: алгоритмы TripleDES, AES128, AES256 с режимом шифрования CBC (англ. Cipher Block Chaining).
Получение хэш-функций: алгоритмы SHA-1, SHA-2.
При соединении Платёжный шлюз проверяет сертификат и разрешенные криптографические параметры.
Прикладные данные, обслуживающие запросы, передаются между Платёжным шлюзом и ИС ТСП в виде XML-сообщений по протоколу HTTP (сontent-type: text/xml) методом POST.
Передаваемые данные имеют кодировку UTF-8.
Что вышло сделать:
Код:
$fOut = fopen($_SERVER["DOCUMENT_ROOT"].'/keys/curl_out.txt', "w");
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml", "Accept: text/xml"));
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 GTB6");
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSLCERT, $_SERVER["DOCUMENT_ROOT"].'/keys/pubkey.pem');
curl_setopt($ch, CURLOPT_SSLKEY, $_SERVER["DOCUMENT_ROOT"].'/keys/webshop_key.pem');
curl_setopt($ch, CURLOPT_CAINFO, $_SERVER["DOCUMENT_ROOT"].'/keys/Bank-all-CA.pem');
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlData);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_STDERR, $fOut);
$output = curl_exec($ch);
if(!$output)
{
echo "Curl Error : " . curl_error($ch);
}
else
{
$info = curl_getinfo($ch);
echo '<pre>'.print_r($info, true).'</pre>';
echo htmlentities($output);
}
Проверка ключа платежного шлюза проходит (CURLOPT_SSL_VERIFYHOST, CURLOPT_SSL_VERIFYPEER) - это обязательное условие. А с моей стороны сертификат не передается для аутентификации, куда дальше копать уже не знаю. Прошу помочь или натолкнуть на мысль, что тут не хватает?