hitrov / oci-arm-host-capacity

This script allows to bypass Oracle Cloud Infrastructure 'Out of host capacity' error immediately when additional OCI capacity will appear in your Home Region / Availability domain.
MIT License
964 stars 490 forks source link

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

Open ZaydenGit opened 6 months ago

ZaydenGit commented 6 months ago

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 commented 6 months ago

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

DieFetteBrxnette commented 6 months ago

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 commented 5 months ago

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 commented 5 months ago

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 commented 3 months ago

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