web-dev-qa-db-ja.com

cURLエラー60:SSL証明書の問題:ローカル発行者証明書を取得できません

YouTube Data APIを使用して、特定のチャンネルにアップロードされた動画のリストを収集したい。ただし、オンラインで実装する前に、コードをオフライン環境で実行しようとしています(WAMPserver、PHP 5.5.12、Apache 2.4.9)。次のコードを使用しています。

require_once 'google-api-php-client-2.0.0-RC5/vendor/autoload.php';

$client = new Google_Client();
$client->setApplicationName("SRC_Thor");
$client->setDeveloperKey("xxxxxxxxxxx");

$youtube = new Google_Service_YouTube($client);

$channelResponse = $youtube->channels->listChannels('contentDetails', []);
var_dump($channelResponse);

ただし、次のエラーが発生します。

致命的エラー:メッセージ「cURLエラー60:SSL証明書の問題:ローカル発行者証明書を取得できません(http://curl.haxx.se/libcurl/c/libcurl-errors.html」を参照)を含むキャッチされない例外 'GuzzleHttp\Exception\RequestException'

SOソリューションとして提供していますが、役に立たない)のほとんどのトピックとして、cacert.pemの最新バージョンを追加しようとしました。

28
Sjors Hijgenaar

Xamppを使用してWindowsを使用している場合、 here からより良い答えを盗んでいます。Googleが最初にこの質問を示してくれると助かります。

  1. ここからcacert.pemをダウンロードして抽出します(クリーンなファイル形式/データ)

    https://curl.haxx.se/docs/caextract.html

  2. 中に入れて :

    C:\ xampp\php\extras\ssl\cacert.pem

  3. この行をphp.iniに追加します

    curl.cainfo = "C:\ xampp\php\extras\ssl\cacert.pem"

  4. ウェブサーバー/ Apacheを再起動します

91
Phung D. An

ローカル環境を使用しているのを見て、SSLを安全に無効にできます。これは次の方法で行いました。

$guzzleClient = new \GuzzleHttp\Client(array( 'curl' => array( CURLOPT_SSL_VERIFYPEER => false, ), ));
$client->setHttpClient($guzzleClient);

どこ $clientは私のGoogle_Client()です。

27
Sjors Hijgenaar
$guzzleClient = new \GuzzleHttp\Client(['verify' => false]);

Guzzleバージョン6

Guzzle Docsを参照できます

http://docs.guzzlephp.org/en/latest/request-options.html#verify

11
lijinma

私はxampsで作業します

私はこれを試してみたが、うまくいった

  1. 開いた vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php

これを変える

$conf[CURLOPT_SSL_VERIFYHOST] = 2;
$conf[CURLOPT_SSL_VERIFYPEER] = true;

これに

$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = FALSE;

このファイルを更新した場合、変更は失われます一時的なソリューションです

$guzzleClient = new \GuzzleHttp\Client(['verify' => false]);
0
abbas waranlu

リンクから証明書をダウンロードすることでも機能しました https://Gist.github.com/VersatilityWerks/5719158/download 次にC:\ xampp\php\extras\sslに保存して編集php.ini。 Php.iniをすばやく取得するには、下の図を参照してください ここに画像の説明を入力してください

次に、Apacheを停止して再起動します。それはうまくいきました!!!

0
kimoduor

開発とテストの本質については、迅速な修正のための2つのオプションがあります

  1. つかいます
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => false]); //where $url is your http address
  1. 上記の@Pham Huy Anhの回答に従ってください。
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => 'C:\xampp\php\extras\ssl\cacert.pem']);

それが誰かを助けることを願っています。

0
walecloud

PCI-DSS 3.1はすべてのSSLにTLS 1.2のみを要求するため、多くのプロバイダーは単にTLS 1.2以外のすべてをオフにします。私は、CURLがハンドシェイクのダウングレードの失敗をSSL証明書の検証の失敗と見なすこの種の問題に遭遇しました。コードがCURL呼び出しを行っている場所を見つけて、この行を追加してみてください(必ず$chコードが使用するCURLハンドルを含む)

curl_setopt($ch, CURLOPT_SSLVERSION, 6);  // Force TLS 1.2
0
Machavity