2017-01-04 23 views
-1

Я получил файл JKS, зашифрованный паролем из финансового учреждения. API использует порт 444. Когда я использую файл JKS и пароль с помощью SoapUI (Настройки -> Настройки SSL -> KeyStore [File] + KeyStore Password), я могу отправлять и получать запросы и ответы XML. Без файла JSK и пароля, если я попытаюсь получить доступ к URL-адресу, браузер не загрузит страницу API.Файл JKS с паролем для доступа к API финансового института

После установки файла и предоставления пароля браузеру (Firefox -> Параметры -> Предварительный -> Просмотр сертификата -> Импорт); результат страницы показывает Неправильный запрос '[Формат XML] (Это позволяет получить доступ к странице с сертификатом).

Я преобразовал файл P12/PEM (с помощью: Keytool -importkeystore -srckeystore keystore.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore keystore.p12) - и она работает так же, как и выше (как для SoupUI и браузера).

Мне нравится использовать этот файл (JKS/PEM) в моем PHP-коде на сервере разработки IIS и сервере Apache-Production. Во время выполнения я получаю: Ошибка: проблема сертификата SSL: не удалось получить сертификат местного эмитента.

Примечание: тот же файл JKS с тем же паролем используется другим поставщиком, в среде Python работает нормально.

Пожалуйста, предложите решение.

спасибо.

+0

Постановили: работает как шарм :) Спасибо за моральную поддержку: D –

ответ

0

Сначала необходимо преобразовать файл JKS в PEM, который может использоваться вашим PHP-кодом.

Тогда это нужно сделать:

$options = array(
    CURLOPT_RETURNTRANSFER => true,   // return web page 
    CURLOPT_PORT   => <Port#>,   //Post 
    CURLOPT_CAPATH   => $ca_path,  //CA Path ***and not filename 
    CURLOPT_CAINFO   => $cert_file, //Certificate File 
    CURLOPT_SSLCERT   => $key_file,  //SSL file 
    CURLOPT_SSLKEYPASSWD => $key_password, //Public Key 
    CURLOPT_HTTPHEADER  => $aHeaders,  //Header 
    CURLOPT_POST   => 1,   //Send POST 
    CURLOPT_POSTFIELDS  => $xml,   //To Fetch Data 
    CURLINFO_HEADER_OUT  => $properties, //Application's Username and password 
); 
$ch = curl_init($url); 
curl_setopt_array($ch, $options); 
$content = curl_exec($ch); 
$err = curl_errno($ch); 
$errmsg = curl_error($ch); 
$header = curl_getinfo($ch); 
curl_close($ch); 

$header['errno'] = $err; 
$header['errmsg'] = $errmsg; 
$header['content'] = $content;