完全なエラー
RequestException in CurlFactory.php line 187: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
シナリオ
誰かが私にこれらの2つのララキャストの答えを指す前に: https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-発行者証明書
私はすでにそれらを見てきました、そしてそれが私がここにいる理由です、
私が持っている問題は、cacert.pemファイルを持っていることですが、それをどこに置くのか意味がありません。答えは、xamppディレクトリにファイルを配置し、php.ini
ファイルを変更するがなんでもxampp、私はプロジェクトを実行するためにlaravelの職人サーバーを使用しています。 xamppが使用されていない場合は、このファイルをどこに配置しますか?
私の正確な質問
laravel 5.4でこのエラーを停止するには、cacert.pem
ファイルをどこに配置しますか
vendor/
フォルダー内のファイルを変更しないでください。今まで。これらは、次に実行するcomposer=更新時に上書きされます。
WampServerのソリューションは次のとおりです
私はWampServerにPHP 7.1.9)を使用しているため、以下の例の7.1.9
を現在使用しているバージョン番号に変更します。
C:\wamp64\bin\php\php7.1.9
フォルダーに配置しますphp.ini
を開き、次の行を見つけます。;curl.cainfo
次のように変更します。
curl.cainfo = "C:\wamp64\bin\php\php7.1.9\cacert.pem"
行頭のセミコロンを必ず削除してください。
php.ini
への変更を保存し、WampServerを再起動すると、準備完了です!
これは把握するのがストレスでしたが、laravel=を使用してこの問題を抱えている人々に対する正確な答えは次のとおりです。
私の正確なアプリケーションのバージョンは...
ララヴェル:5.4
Guzzlehttp:6.2
Laravel Socialite:3.0
このリンクからこのcurl証明書の新しいコピーをダウンロードします。 https://Gist.github.com/VersatilityWerks/5719158/download
laravel application vendor/guzzlehttp/guzzle/src/cacert.pem
]のベースルートから始まるこのパスにファイルを保存します
次にその同じディレクトリでRequestOptions.php
を開き、CERT
という定数までスクロールダウンして、このconst CERT = 'cacert.pem';
に変更すると、すべてが修正されます。
[〜#〜] edit [〜#〜]
人々が指摘しているように、ベンダーフォルダーは決して編集しないでください。これは、私が暇なときに作成していたアプリケーションの簡単な修正でした。私の会社のアプリケーションなど、それほど重要なものではありませんでした。ご自身の責任でこの方法を使用してください。もっと具体的なものが必要な場合は、他の回答をご覧ください。
迅速な解決策ですが、安全ではありません(非推奨)。
CURLの使用:
CURLOPT_SSL_VERIYPEERをfalseに設定します
Guzzleの使用:
検証をfalseに設定します
例$ client-> request( 'GET'、 ' https://somewebsite.com '、['verify' => false]);
\vendor\guzzlehttp\guzzle\src\Client.php
コマンドを実行するとベンダーフォルダーに手動で加えられた変更が上書きされるため、一部のユーザーがcomposer update
ファイルに変更を加えることを推奨するソリューションは最悪のアドバイスです。php.ini
ファイルにアクセスできる場合に最適です。共有ホスティングを使用している場合、php.ini
ファイルを編集できない場合があります。php.ini
ファイルにアクセスできない場合(例:共有ホスティング)
GuzzleHttp\Client
ファイルへのパスとして値を持つcacert.pem
コンストラクターにverify
キーを追加します。Laravel 5.7およびGuzzleHttp 6.0
// https://example.com/v1/current.json?key1=value1&key2=value2
$guzzleClient = new GuzzleHttp\Client([
'base_uri' => 'https://example.com',
'verify' => base_path('cacert.pem'),
]);
$response = $guzzleClient->get('v1/current.json', [
'query' => [
'key1' => 'value1',
'key2' => 'value2',
]
]);
$response = json_decode($response->getBody()->getContents(), true);
別の人が最近同じ問題を求めましたが、私の答えは彼の解決策だったようです。ここに私が言及した投稿がありました: RL Post
それは私が言ったことです :
正直に言って、Laravelについては何も知りません。しかし、他の多くの人と同じように、Symfonyでも同じ問題がありました。そしてあなたのように、私は成功せずに多くのことを試しました。
最後に、このソリューションは私のために働いた: RL solution
これは、証明書の問題の代わりに、環境の非互換性に起因する可能性があることを示しています。 WAMPの代わりにXAMPPを使用しましたが、うまくいきました。
Valetを実行し、valetのあるサイトから別のサイトにapiを作成しようとしたときにこの問題が発生しました。 OSXで作業していることに注意してください。ここで解決策を見つけました: https://github.com/laravel/valet/issues/46 要するに、valet pemをシステムCAバンドルにコピーする必要があります。これを実行するだけです:
cp /usr/local/etc/openssl/cert.pem /usr/local/etc/openssl/cert.pem.bak && cat ~/.config/valet/CA/LaravelValetCASelfSigned.pem >> /usr/local/etc/openssl/cert.pem