cURL error 60: SSL certificate: unable to get local issuer certificate
If you are using PHP 5.6 with Guzzle, Guzzle has switched to using the PHP libraries autodetect for certificates rather than it's process (ref). PHP outlines the changes here.
Finding out Where PHP/Guzzle is Looking for Certificates
You can dump where PHP is looking using the following PHP command:
var_dump(openssl_get_cert_locations());
Getting a Certificate Bundle
For OS X testing, you can use homebrew to install openssl brew install openssl
and then use openssl.cafile=/usr/local/etc/openssl/cert.pem
in your php.ini or Zend Server settings (under OpenSSL).
A certificate bundle is also available from curl/Mozilla on the curl website: https://curl.haxx.se/docs/caextract.html
Telling PHP Where the Certificates Are
Once you have a bundle, either place it where PHP is already looking (which you found out above) or update openssl.cafile
in php.ini. (Generally, /etc/php.ini
or /etc/php/7.0/cli/php.ini
or /etc/php/php.ini
on Unix.)
Attention Wamp/Wordpress/windows users. I had this issue for hours and not even the correct answer was doing it for me, because i was editing the wrong php.ini file because the question was answered to XAMPP and not for WAMP users, even though the question was for WAMP.
Here's what I did:
Download the certificate bundle.
Put it inside of
C:\wamp64\bin\php\your php version\extras\ssl
Inside of
C:\wamp64\bin\apache\apache(version)\modules
, make sure the filemod_ssl.so
is thereInside of Apache directory
C:\wamp64\bin\apache\apache2.4.27\conf
, enablemod_ssl
inhttpd.conf
Enable
php_openssl.dll
inphp.ini
. Be aware my problem was that I had two php.ini files and I need to do this in both of them. First one can be located inside of your WAMP taskbar icon here.And the other one is located in
C:\wamp64\bin\php\php(Version)
Find the location for both of the
php.ini
files and find the linecurl.cainfo =
and give it a path like thiscurl.cainfo = "C:\wamp64\bin\php\php(Version)\extras\ssl\cacert.pem"
Now save the files and restart your server and you should be good to go
How to solve this problem:
download and extract cacert.pem following the instructions at https://curl.se/docs/caextract.html
save it on your filesystem somewhere (for example, XAMPP users might use
C:\xampp\php\extras\ssl\cacert.pem
)in your php.ini, put this file location in the
[curl]
section (putting it in the[openssl]
section is also a good idea):
[curl]
curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
[openssl]
openssl.cafile = "C:\xampp\php\extras\ssl\cacert.pem"
- restart your webserver (e.g. Apache) and PHP FPM server if applicable
(Reference: https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate)