Передача нескольких сертификатов через запрос Curl с использованием Guzzle

У меня есть http-запрос, который использует ключ, сертификат и цепочку сертификатов. Как это можно перевести на Guzzle? Проблема в том, что я не знаю, как добавить все свои сертификаты в запрос Guzzle. В документации есть пример только для одного сертификата

Пример моего запроса:

// curl -vvv -X POST --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: application/json' --cacert client-bundle.pem --key key.pem --cert cert.pem 'my_url'

Моя функция отправляет запрос с помощью Guzzle на данный момент:

try {
$response = $this->request('POST', 'my_url', [
                'headers' => [
                    'Content-Type' => 'application/x-www-form-urlencoded',
                    'Accept' => 'application/json'
                ],

            ]);

return Json::decode($response->getBody()->getContents());
            $this->checkResponse($result);

        } catch (GuzzleException $e) {
            return $e->getMessage();
}

Пытался найти пример отправки запроса с передачей нескольких сертификатов. Я не смог найти такой пример, использование только одного сертификата меня не устраивает

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
67
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Чтобы добавить несколько сертификатов в запрос Guzzle, вы можете использовать параметры ssl_key и cert в массиве параметров запроса. Параметр ssl_key может быть установлен на путь к вашему файлу закрытого ключа, а параметр cert может быть установлен на путь к вашему файлу сертификата.

$certFile = 'cert.pem';
$keyFile = 'key.pem';
$caFile = 'client-bundle.pem';

$client = new GuzzleHttp\Client();

try {
    $response = $client->request('POST', 'my_url', [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => 'application/json'
        ],
        'cert' => [$certFile, $keyFile],
        'ssl_key' => $keyFile,
        'verify' => $caFile
    ]);

    $result = $response->getBody()->getContents();

    $this->checkResponse($result);

    return Json::decode($result);

} catch (GuzzleHttp\Exception\GuzzleException $e) {
    return $e->getMessage();
}

С помощью команды cat я объединил сертификаты в один файл

cat *.pem >> cert-pem-bundle.pem

После этого полученный файл использовался в параметре cert. Конечная функция:

try {

            $response = $this->request('POST', 'my_url', [
                'headers' => [
                    'Content-Type' => 'application/x-www-form-urlencoded',
                    'Accept' => 'application/json'
                ],
                'cert' => ['/app/cert-pem-bundle.pem', 'testtest'], // testtest - pass phrase
            ]);

            $result = Json::decode($response->getBody()->getContents());
            return $result;
        } catch (GuzzleException $e) {
            return $e->getMessage();
        }

Похоже на плохую практику объединения ключей в один файл.

TheMMSH 18.04.2023 13:31

Я согласен. Но это было первое решение, которое я нашел. Позже я использовал решение, предложенное Мехди

IronSide 21.04.2023 14:31

Другие вопросы по теме