PHP CURL CURLOPT_SSL_VERIFYPEERは無視されました


117

何らかの理由で、HTTPSでCURLを使用できません。curlライブラリのアップグレードを実行するまで、すべてが正常に機能していました。CURLリクエストを実行しようとすると、この応答が発生します。SSLCA 証明書に問題があります(パス?アクセス権?)

関連する問題についてここに投稿された提案に従って、私は次のことを試みました:

  • ホストとピアの検証を無効にする

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
  • http://curl.haxx.se/docs/caextract.htmlCURLOPT_SSL_VERIFYPEERからダウンロードしたcacert.pemを有効にしてポイントします

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);  
    curl_setopt($cHandler, CURLOPT_CAINFO, getcwd() . "/positiveSSL.ca-bundle");
  • また、接続しようとしているサーバーのバンドルCA証明書として提供されているpositiveSSL.ca-bundleでも同じことを試みました。

  • php ini設定を編集するcurl.cainfo=cacert.pem(同じディレクトリ内のファイルで、Apacheからアクセス可能)

  • 名前/etc/pki/nssdbを変更/etc/pki/nssdb.old

残念ながら、上記のいずれも私の問題を解決できず、SSL CA証明書(パス?アクセス権?)に関する問題が常に発生します。

そもそも、この確認は必要ありません(セキュリティの問題は承知しています)。

誰か他の提案がありますか?

更新

最新のライブラリに更新してボックス全体を再起動した後、私がやっていたapacheだけでなく、すべてが再び動作しているようです!!!


1
別のSSLスタックに対してコンパイルされたCurlライブラリをアップグレードしましたか(おそらくGnuTLSとOpenSSL)?
ブルーノ

私はそうは思いません。システムはFedora 16であり、それは本当にyumアップデートの場合でした。最も厄介なことは、この検証全体を必要としない/望まないことであり、単純にそれを無効にすることはできないようです。
グレッグ

セキュリティのためにHTTPSを使用することを目的としている場合は、常にこの検証プロセスを実施する必要があります。
Bruno

私はそれを知っていますが、ここでの私のユースケースはそれを少し冗長にします。また、curlを利用可能な最新のものに更新し、phpを5.4に更新しました。現在、エラーメッセージは表示されなくなりましたが、curlから同じ内容を取得できません:)
Greg

ハ、私はどこかでcurl_errno関数がステータス77を報告します。これはマニュアルによればCURLE_SSL_CACERT_BADFILEです。
グレッグ

回答:


240

ドキュメントによると:ホストまたはピア証明書を検証するには、CURLOPT_CAINFOオプションで代替証明書を指定する必要があります。または、オプションで証明書ディレクトリを指定できCURLOPT_CAPATHます。

また見て CURLOPT_SSL_VERIFYHOST:

  • 1は、SSLピア証明書の共通名の存在を確認します。
  • 2は、共通名の存在を確認し、提供されたホスト名と一致することを確認します。

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

5
SSL検証をオフにすると、SSLのすべてのセキュリティがかなり削除されます。代わりにPHP構成を修正する必要があります。
Scopey 2017

7
@Scopeyですが、自己署名証明書を使用するローカル開発環境で必要になる場合があります。したがって、おそらくそれは非パブリック環境では意味をなさないでしょうが、覚えておくと、ログにいくつかの警告を記録することを常におSSL verification disabled
勧め

2

CentOS7マシンでも同じ問題が発生しました。を無効にVERIFYHOST VERIFYPEERしても問題は解決しませんでした。cURLエラーはなくなりましたが、応答は依然として無効でした。こうwgetカールがまたやったのと同じリンクには、証明書のエラーが発生しました。

->私たちのソリューションは、VPSを再起動することでもありましたが、これで問題が解決し、リクエストを再度完了することができました。

私たちにとって、これはメモリ破損の問題のように思われました。VPSを再起動すると、ライブラリがメモリに再度読み込まれ、機能します。したがって、上記の解決策が@clover機能しない場合は、マシンを再起動してください。


断続的でないことを確認してください。ペイパルとピアの検証で問題が発生しましたが、機能する場合と機能しない場合があります。それはランダムに見えました。cafileパスを明示的に設定し、問題が解決された場所をcurlに通知します。
Neil Davis、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.