web-dev-qa-db-ja.com

PHP CURL CURLOPT_SSL_VERIFYPEERは無視されます

どういうわけか私はHTTPSでCURLを使うことができません。私がcurlライブラリのアップグレードを実行するまで、すべてがうまくいっていました。 CURL要求を実行しようとしたときに、この応答が発生しました。SSL CA証明書(パス?アクセス権?)の問題

私が以下をしようとした関連問題に関してここに掲示された以下の提案は:

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

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

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

  • curl.cainfo=cacert.pem(同じディレクトリにあり、Apacheからアクセス可能なファイル)でphp ini設定を編集します。

  • /etc/pki/nssdb/etc/pki/nssdb.oldに名前変更します

残念ながら上記のどれもが私の問題を解決することができないし、私は絶えずSSL CA証明書(パス?アクセス権?)の問題に関するメッセージを受け取ります。

そもそも私はこの検証を必要としません(私はセキュリティ問題を知っています)。

他に何か提案がありますか?

UPDATE

最新のライブラリにアップデートしてボックス全体を再起動した後、私が行っていたApacheだけでなく、すべてが再び機能しているようです。

97
Greg

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

CURLOPT_SSL_VERIFYHOST:も見てください

  • SSLピア証明書に共通名が存在することを確認するには、1を入力します。
  • 2一般名の存在を確認し、それが指定されたホスト名と一致することも確認します。

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

CentOS7のマシンでも同じ問題がありました。 VERIFYHOSTVERIFYPEERを無効にしても問題は解決されず、cURLエラーは発生しませんでしたが、応答はまだ無効でした。 cURLと同じリンクに対してwgetを実行した場合も、証明書エラーが発生しました。

- >私達の解決策はまたVPSを再起動することでした、これはそれを解決し、私達は再度要求を完了することができました。

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

1
Rvanlaak