Laravel отправляет SSL Cert с запросом curl - PullRequest
0 голосов
/ 02 июля 2019

С API, к которому я пытаюсь подключиться, я должен отправить ssl-ключ с моими запросами.Я могу сделать это нормально в стандартном PHP.Когда я использую Laravel, я не могу заставить его работать правильно.

        $cert = 'app/file_combo.pem';

$ch = curl_init();
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_SSLCERT, $cert);
  curl_setopt($ch, CURLOPT_SSLCERTPASSWD , $pass);
  curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  curl_setopt($ch, CURLOPT_VERBOSE, true);
  $response = curl_exec($ch);

Ответ - ничто.Я предполагаю, что $ url, с которым я разговариваю, игнорирует меня.поэтому я добавил:

  $info = curl_getinfo($ch);
  echo "<pre>";
  print_r($info);

Ответ:

[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
[redirect_url] => 
[primary_ip] => a.b.c.d
[certinfo] => Array
    (
    )

Информация о сертификате пуста ....

Итак, я добавил:

 if(curl_errno($ch)){   
            echo 'Curl error: ' . curl_error($ch);
        }

и я вижу:

Curl error: could not load PEM client certificate, LibreSSL error error:02FFF002:system library:func(4095):No such file or directory, (no key found, wrong pass phrase, or wrong file format?)

Я пробовал множество путей к файлам и, похоже, не могу понять это правильно.файл pem находится в каталоге приложения в laravel.

Итак, я попробовал Guzzle.

        $options = [
        'headers' => [
            "Content-type: text/xml;charset=\"utf-8\"",
            "Accept: text/xml",
            "Cache-Control: no-cache",
            "Connection: Keep-Alive",
            "Pragma: no-cache",
            "Content-length: ".strlen($xml),
        ],
        'body' => $xml,
        'verify' => 'app/file_combo.pem'
    ];

и получил ответ:

"message": "SSL CA bundle not found: app/file_combo.pem",

Мне все равноесли я использую жрет или нет, я просто пытаюсь заставить его работать ... Опять же, в стандартном php запрос curl прекрасно работает.

...