web-dev-qa-db-ja.com

cURLエラー60:Laravel 5.4のSSL証明書

完全なエラー

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-発行者証明書

https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate/replies/52954

私はすでにそれらを見てきました、そしてそれが私がここにいる理由です、

私が持っている問題は、cacert.pemファイルを持っていることですが、それをどこに置くのか意味がありません。答えは、xamppディレクトリにファイルを配置し、php.iniファイルを変更するがなんでもxampp、私はプロジェクトを実行するためにlaravelの職人サーバーを使用しています。 xamppが使用されていない場合は、このファイルをどこに配置しますか?

私の正確な質問

laravel 5.4でこのエラーを停止するには、cacert.pemファイルをどこに配置しますか

16
Yasmin French

vendor/フォルダー内のファイルを変更しないでください。今まで。これらは、次に実行するcomposer=更新時に上書きされます。

WampServerのソリューションは次のとおりです

私はWampServerにPHP 7.1.9)を使用しているため、以下の例の7.1.9を現在使用しているバージョン番号に変更します。

  1. このファイルをダウンロードしてください: http://curl.haxx.se/ca/cacert.pem
  2. このファイルをC:\wamp64\bin\php\php7.1.9フォルダーに配置します
  3. php.iniを開き、次の行を見つけます。

;curl.cainfo

次のように変更します。

curl.cainfo = "C:\wamp64\bin\php\php7.1.9\cacert.pem"

行頭のセミコロンを必ず削除してください。

php.iniへの変更を保存し、WampServerを再起動すると、準備完了です!

69
kjdion84

これは把握するのがストレスでしたが、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 [〜#〜]

人々が指摘しているように、ベンダーフォルダーは決して編集しないでください。これは、私が暇なときに作成していたアプリケーションの簡単な修正でした。私の会社のアプリケーションなど、それほど重要なものではありませんでした。ご自身の責任でこの方法を使用してください。もっと具体的なものが必要な場合は、他の回答をご覧ください。

6
Yasmin French

迅速な解決策ですが、安全ではありません(非推奨)。

CURLの使用:

CURLOPT_SSL_VERIYPEERをfalseに設定します

Guzzleの使用:

検証をfalseに設定します

例$ client-> request( 'GET'、 ' https://somewebsite.com '、['verify' => false]);

6
Jeffrey
  • \vendor\guzzlehttp\guzzle\src\Client.phpコマンドを実行するとベンダーフォルダーに手動で加えられた変更が上書きされるため、一部のユーザーがcomposer updateファイルに変更を加えることを推奨するソリューションは最悪のアドバイスです。
  • Jeffrey によって提案された解決策は、汚い、簡単な修正ですが、実稼働アプリケーションでは推奨されません。
  • kjdion84 によって提案された解決策は、Webサーバー上のphp.iniファイルにアクセスできる場合に最適です。共有ホスティングを使用している場合、php.iniファイルを編集できない場合があります。

php.iniファイルにアクセスできない場合(例:共有ホスティング)

  1. このファイルをダウンロードしてください: http://curl.haxx.se/ca/cacert.pem
  2. このファイルをLaravelプロジェクトのルートフォルダーに配置します。
  3. 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);
2
Hamza Rashid

別の人が最近同じ問題を求めましたが、私の答えは彼の解決策だったようです。ここに私が言及した投稿がありました: RL Post

それは私が言ったことです :

正直に言って、Laravelについては何も知りません。しかし、他の多くの人と同じように、Symfonyでも同じ問題がありました。そしてあなたのように、私は成功せずに多くのことを試しました。

最後に、このソリューションは私のために働いた: RL solution

これは、証明書の問題の代わりに、環境の非互換性に起因する可能性があることを示しています。 WAMPの代わりにXAMPPを使用しましたが、うまくいきました。

0
Doshibu

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
0
omarjebari