Skip to content
This repository has been archived by the owner on Aug 13, 2024. It is now read-only.

PHP Fatal error: Uncaught Hitrov\Exception\CurlException: curl error occurred: SSL certificate problem: unable to get local issuer certificate #124

Open
ZaydenGit opened this issue Mar 7, 2024 · 5 comments

Comments

@ZaydenGit
Copy link

not sure what I did wrong,

php index.php
PHP Fatal error: Uncaught Hitrov\Exception\CurlException: curl error occurred: SSL certificate problem: unable to get local issuer certificate, response: in C:.oci\oci-arm-host-capacity\src\HttpClient.php:31
Stack trace:
#0 C:.oci\oci-arm-host-capacity\src\OciApi.php(257): Hitrov\HttpClient::getResponse()
#1 C:.oci\oci-arm-host-capacity\src\OciApi.php(132): Hitrov\OciApi->call()
#2 C:.oci\oci-arm-host-capacity\index.php(74): Hitrov\OciApi->getInstances()
#3 {main}
thrown in C:.oci\oci-arm-host-capacity\src\HttpClient.php on line 31

@VentedSun
Copy link

im also getting this issue, did u find a solution?

@DieFetteBrxnette
Copy link

You guys need to download the latest https://curl.se/docs/caextract.html and add this in Line 23 oof HttpClient.php
curl_setopt($curl, CURLOPT_CAINFO, 'C:/PATH_TO_CERT'); As you are running it on Windows and windows doesn't come with a standard set of SSL Certificates. You need to download them manually and add the neccessary code to tell the program where to find those.

@Genious28
Copy link

Genious28 commented May 1, 2024

You guys need to download the latest https://curl.se/docs/caextract.html and add this in Line 23 oof HttpClient.php curl_setopt($curl, CURLOPT_CAINFO, 'C:/PATH_TO_CERT'); As you are running it on Windows and windows doesn't come with a standard set of SSL Certificates. You need to download them manually and add the neccessary code to tell the program where to find those.

I'm getting the same issue, can you guide in a bit more detail please?
is this correct?

HttpClient:

<?php


namespace Hitrov;


use Hitrov\Exception\ApiCallException;
use Hitrov\Exception\CurlException;
use JsonException;

class HttpClient
{
    /**
     * @param array $curlOptions
     * @return array
     * @throws ApiCallException
     * @throws JsonException|CurlException
     */
    public static function getResponse(array $curlOptions): array
    {
        $curl = curl_init();
        // curl_setopt_array($curl, $curlOptions);
        curl_setopt($curl, $curlOptions, "C:/Tools/php83/cURL/cacert-2024-03-11.pem");
        
        $response = curl_exec($curl);
        $error = curl_error($curl);
        $errNo = curl_errno($curl);
        $info = curl_getinfo($curl);
        curl_close($curl);

        if ($response === false || ($error && $errNo)) {
            throw new CurlException("curl error occurred: $error, response: $response", $errNo);
        }

        $responseArray = json_decode($response, true);
        $jsonError = json_last_error();
        $logResponse = $response;
        if (!$jsonError) {
            $logResponse = json_encode($responseArray, JSON_PRETTY_PRINT);
        }

        if ($info['http_code'] < 200 || $info['http_code'] >= 300) {
            throw new ApiCallException($logResponse, $info['http_code']);
        }

        if ($jsonError) {
            $jsonErrorMessage = json_last_error_msg();
            throw new JsonException("JSON error occurred: $jsonError ($jsonErrorMessage), response: \n$logResponse");
        }

        return $responseArray;
    }
}

I'm getting the following error;

[01-May-2024 14:10:00 UTC] PHP Fatal error:  Uncaught TypeError: curl_setopt(): Argument #2 ($option) must be of type int, array given in C:\Users\%User%\oci-arm-host-capacity\src\HttpClient.php:23
Stack trace:
#0 C:\Users\%User%\oci-arm-host-capacity\src\HttpClient.php(23): curl_setopt()
#1 C:\Users\%User%\oci-arm-host-capacity\src\OciApi.php(257): Hitrov\HttpClient::getResponse()
#2 C:\Users\%User%\oci-arm-host-capacity\src\OciApi.php(132): Hitrov\OciApi->call()
#3 C:\Users\%User%\oci-arm-host-capacity\index.php(74): Hitrov\OciApi->getInstances()
#4 {main}
  thrown in C:\Users\%User%\oci-arm-host-capacity\src\HttpClient.php on line 23

@Genious28
Copy link

Genious28 commented May 1, 2024

There is no CURLOPT_CAINFO that's why i left $curlOptions in it's place.

But, even if i do put it in, i get the following Error;

[01-May-2024 14:14:39 UTC] PHP Fatal error:  Uncaught Hitrov\Exception\CurlException: curl error occurred: No URL set, response:  in C:\Users\%User%\oci-arm-host-capacity\src\HttpClient.php:32
Stack trace:
#0 C:\Users\%User%\oci-arm-host-capacity\src\OciApi.php(257): Hitrov\HttpClient::getResponse()
#1 C:\Users\%User%\oci-arm-host-capacity\src\OciApi.php(132): Hitrov\OciApi->call()
#2 C:\Users\%User%\oci-arm-host-capacity\index.php(74): Hitrov\OciApi->getInstances()
#3 {main}
  thrown in C:\Users\%User%\oci-arm-host-capacity\src\HttpClient.php on line 32

Which probably means it's working but then it get's stuck at line; 29> curl_close($curl);

@Jubal-Norman
Copy link

If anyone else is here with this issue, this stack overflow helped me. Specifically Boern's answer:
https://stackoverflow.com/questions/24611640/curl-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate

TL:DR
If you are using php you need to add the following to your php.ini:
curl.cainfo="/path/to/downloaded/cacert.pem"
With the .pem file downloaded from https://curl.se/docs/caextract.html

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants