正しいAPP_ID、APP_SECRETなどを含むcurlリクエストを
https://oauth.vk.com/access_token?client_id=APP_ID&client_secret=APP_SECRET&code=7a6fa4dff77a228eeda56603b8f53806c883f011c40b72630bb50df056f6479e52a&redirect_uri=REDIRECT_URI
それからaccess_tokenを取得する必要がありますが、そうでない場合はFALSEとcurl_error()
print次のメッセージを取得します:
60: SSL certificate problem: self signed certificate in certificate chain
私のコードは:
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, $url);
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
if ( ! $output) {
print curl_errno($ch) .': '. curl_error($ch);
}
// close curl resource to free up system resources
curl_close($ch);
return $output;
上記のリンクに手動で移動すると、access_tokenが取得されます。なぜcurlで動作しないのですか?助けてください。
CURLOPT_SSL_VERIFYPEER
を無効にすることを提案する回答は受け入れられません。問題は「なぜcURLで機能しないのか」であり、Martijn Holsが正しく指摘しているように、それは危険です。
このエラーは、CAルート証明書の最新のバンドルがないことが原因である可能性があります。これは通常、ホストのSSL証明書を検証するためにcurlが使用する一連の暗号署名を含むテキストファイルです。
PHPのインストールにこれらのファイルのいずれかが含まれていること、およびそれが最新であることを確認する必要があります(そうでない場合は、ここからダウンロードしてください。 http://curl.haxx.se/docs/ caextract.html )。
次に php.iniで設定 :
curl.cainfo = <absolute_path_to> cacert.pem
実行時に設定する場合は、次を使用します。
curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
この回避策は、dangerousおよび非推奨です。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
SSLピア検証を無効にすることはお勧めできません。そうすると、リクエストがMITM攻撃者にさらされる可能性があります。
実際、最新のCAルート証明書バンドルが必要です。更新されたものをインストールするのは簡単です:
cacert.pem
ファイルをダウンロードするPhp.iniファイルでパスを設定します。 Windowsの場合:
curl.cainfo=c:\php\cacert.pem
それでおしまい!
安全性を確保します。
皆さん、非常に重要です!この問題により、数日間夢中になり、curlとopensslのインストールで何が起こっているのかわかりませんでした。私はついに、それが私の中間証明書(私の場合はGoDaddy)が古くなっていることがわかりました。 godaddy SSL管理パネルに戻り、新しい中間証明書をダウンロードすると、問題はなくなりました。
これはあなたの一部の問題だと確信しています。
どうやら、GoDaddyは、次の警告を表示するため、セキュリティ上の問題のために、ある時点で中間証明書を変更しました。
「ダウンロードしたバンドルに含まれる新しいSHA-2中間証明書を必ず使用してください。」
これがあなたの一部を助けることを願っています、私が夢中になっていて、これが私のすべてのサーバー上の問題をクリーンアップしたので...
SSL証明書がシステムに適切にインストールされていない場合、次のエラーが表示される場合があります。
cURLエラー60:SSL証明書の問題:ローカル発行者証明書を取得できません。
この問題は次のように解決できます。
https://curl.haxx.se/ca/cacert.pem から更新された証明書のリストを含むファイルをダウンロードします
ダウンロードしたcacert.pem
ファイルをシステムの安全な場所に移動します
php.ini
ファイルを更新し、そのファイルへのパスを構成します。