0
votes

I am attempting to create a web page through Laravel that can upload files (starting with images, though looking to upgrade to .doc/.pdf at some point) to an AWS S3 bucket. I've followed the following tutorial in regards to having a simple page to build on:

http://itsolutionstuff.com/post/laravel-5-amazon-s3-file-upload-tutorial-part-1example.html

Unfortunately, I'm currently facing the following error:

S3Exception in WrappedHttpHandler.php line 192:

Error executing "ListObjects" on "https://s3-us-west-2.amazonaws.com/..."; AWS HTTP error: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

I've already downloaded the cacert.pem file from https://curl.haxx.se/ca/cacert.pem and have inserted it into php.ini, and I'm still facing this error. For extra thoroughness, I added it into the php.ini-production and php.ini-development files as well, but nothing's changed. What am I still doing wrong?

(I'll add that I'm currently working on a Windows 10 laptop and have downloaded XAMPP, though I'm still using "php artisan serve" to set the local server. I'm unsure if this is a problem or not.)

2

2 Answers

1
votes

Have you followed everything in this question https://stackoverflow.com/a/38667282/3429655 ?

also one thing that might help is to add a parameter to not verify the SSL in your curl call for the S3 as this is your local environment this might be okay on your hosted dev environment since most hosting companies sort out their SSL cert.pem file etc.

Set CURLOPT_SSL_VERIFYPEER to false in order to disable the CA check.

// connect via SSL, but don't check cert
$handle=curl_init('https://s3-us-west-2.amazonaws.com/');
curl_setopt($handle, CURLOPT_VERBOSE, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
$content = curl_exec($handle);

echo $content; // show target page
0
votes

I had the same problem. Error reason is you are working on local or on a not verified server. Just you need to add the following line to "filesystem.php"

'scheme' => 'http' // to disable SSL verification on local development

Your filesystem.php should look like this :

's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'scheme' => 'http' // to disable SSL verification on local development
        ],

When you run it on your server which has SSL verification, you need to comment 'scheme' line.

That's it all. Enjoy your coding !