ошибка 58 cURL при попытке получить доступ к мыльному веб-серверу

Я пытаюсь вызвать (через PHP-скрипт) удаленный (SOAP) веб-сервер через https, для этого требуется сертификат, защищенный паролем.
я использую NuSOAP для звонка, но я всегда получаю следующую ошибку

nusoap_client: получил ошибку wsdl: Получение https://ws-t.pitre.tn.it/wcfrouting/wsdl/Documents.wsdl — ОШИБКА HTTP: ОШИБКА cURL: 58: невозможно использовать сертификат клиента (ключ не найден или неверная пароль?)

require_once("../nusoap/lib/nusoap.php");

$pitre_wsdl = "https://ws-t.pitre.tn.it/wcfrouting/wsdl/Documents.wsdl";
$client = new nusoap_client($pitre_wsdl, "wsdl");
$err = $client->getError();

if ($err) {
print("Error");
exit();
}

$client->setCredentials(
"",
"",
"certificate",
array (
"sslcertfile"   =>  "../pitre/cert.p12",
"sslkeyfile"    =>  "../pitre/cert.p12",
"certpassword"  =>  "mypass",
"verifypeer"    =>  FALSE,
"verifyhost"    =>  FALSE
)
);

$result = $client->call(
"GetTemplatesDocuments",
array (
"CodeAdm"   =>  "myCode")
);

С помощью браузера я могу получить доступ к WISDL без проблем. Я попробовал следующий ответ:

cURL с сертификатами SSL завершается ошибкой: ошибка 58 не может установить файл закрытого ключа

Я получил тот же результат.

Я что-то пропустил?

1

Решение

Я нашел ответ, мое решение заключается в следующем:

Я не смог заставить его работать с nu_soap поэтому я перешел на SoapClient

Во-первых, мне пришлось преобразовать свой сертификат p12 в формат pem с помощью openssl.

openssl pkcs12 -in certificato.p12 -out certificato.pem -clcerts

Затем я скачал сертификаты CA отсюда https://curl.haxx.se/docs/caextract.html

Вот мой рабочий код

$params->a              = "a";
$params->b               = "b";
$params->c               = "c";
$params->d               = "d";
$params->e               = "e";

$context = stream_context_create(array (
"ssl"   =>  array (
"verify_peer"       =>  false,
"verify_peer_name"  =>  true,
"local_cert"        =>  getcwd()."\certificato.pem",  //complete path is mandatory
"passphrase"        =>  "mypassphrase",
"allow_self_signed" =>  true
),
"https" =>  array (
"curl_verify_ssl_peer"  =>  false,
"curl_verify_ssl_host"  => false
)
));

$pitre_client = new SoapClient($pitre_wsdl, array (
"trace"             =>  1,
"exceptions"        =>  true,
"location"          =>  "https://ws-t.pitre.tn.it/wcfrouting/servicerouter.svc",
"cafile"            =>  getcwd()."\cacert.pem", //complete path is mandatory
"stream_context"    =>  $context
));

// the call
$response = $pitre_client->GetTemplatesDocuments(
array (
'request' => $params  //request key can be different
)
);

Я надеюсь, что это поможет кому-то столкнуться с той же проблемой

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector