web-dev-qa-db-fra.com

Passer des certificats clients via une demande Curl à l'aide de Guzzle

J'ai la commande curl suivante

Sudo curl -E openyes.crt.pem --key openyes.key.pem https://sky.myapitutorial.in:444/app/live/get

qui fonctionne bien. Mais quand j'essaye de faire de Guzzle, c'est un échec.

Je ne parviens pas à transmettre les certificats clients dans la demande.

C'est ce que j'ai essayé

$headers = ['Content-Type' => 'application/json','X-Client-Id' => config('mykey') , 'X-Client-Secret' => config('mykey')];

        $client = new client();

        try {
            $response = $client->post(
                $endpoint
                , 
                ['json' => $content, 'headers' => $headers,['connect_timeout' => 650]],
                [
                    'config' => [
                        'curl' => [
                            'CURLOPT_SSLKEY' => base_path().'/openyes.key.pem',
                            'CURLOPT_SSLCERT' => base_path().'/openyes.crt.pem',
                            'CURLOPT_VERBOSE' => true
                        ],
                    ]
                ],
                ['debug'=>true],
                ['http_errors' => false]
            );

            dd($response);

        }
        catch (GuzzleHttp\Exception\ClientException $e) {
            $response = $e->getResponse();
            throw $e;
        }

Je n'ai trouvé aucune solution dans la documentation de Guzzle.

Une idée pourquoi cela ne fonctionne pas?

L'erreur que je reçois est

cURL error 35: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure (see http:\/\/curl.haxx.se\/libcurl\/c\/libcurl-errors.html)
10
Ajeesh

Vous pouvez utiliser ssl_key et cert :

$response = $client->post(
    $endpoint, [
        'json' => $content,
        'headers' => $headers,
        'connect_timeout' => 650,
        // add these
        'cert' => '/path/to/openyes.crt.pem',
        'ssl_key' => '/path/to/openyes.key.pem       
    ]
);

s'ils ont une phrase de passe, vous pouvez les définir comme ceci:

        'cert' => ['/path/to/openyes.crt.pem', 'password'],
        'ssl_key' => ['/path/to/openyes.key.pem', 'password']
14
Federkun