0

PHPのCURLに少し問題があることに気づきました。接続を要求するたびにhttps://「false」が返され、PHPページを開いているときにアクセスしようとするすべてのWebサイトは、信頼できない証明書を持っていると報告します。

これは私のリクエスト方法です:

private function request($url, $params, $method = "GET") {
        if ($method == "GET")
            $url = $this->structGET($url, $params);
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        if (isset($_SERVER['HTTP_USER_AGENT'])) {
            curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        } else {
            curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.X.Y.Z Safari/525.13.');
        }
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);

        $header[] = 'Accept-Language: EN';
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        if ($method == "POST") {
            curl_setopt($ch, CURLOPT_POST, true);
            if ($params)
                curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        }
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }

そして、これは私がFacebookにアクセスしようとしたときにChromeが返すものです。

サイトのセキュリティ証明書は信頼されていません!

www.facebook.comにアクセスしようとしましたが、サーバーは、コンピューターのオペレーティングシステムによって信頼されていないエンティティによって発行された証明書を提示しました。これは、サーバーが独自のセキュリティクレデンシャルを生成したことを意味している可能性があります。これは、Google ChromeがID情報に依存できないか、攻撃者が通信を傍受しようとしている可能性があります。ウェブサイト運営者がこのドメインのセキュリティ強化を要求しているため、続行できません。

4

3 に答える 3

2

証明書の検証を無効にする手法を使用しないでください。彼らは表面上あなたの問題を「解決」するかもしれませんが、彼らはそれを修正するのではなく、問題を無視するだけです。本番コードでは絶対にこれを行わないでください。

最も可能性の高い原因は、MITM企業プロキシが存在するネットワーク上にいることです。これらのデバイスが合法であっても、事実上MITMデバイスです。

トラフィックを監視できるように、元の証明書を独自の内部CAを使用して発行された証明書に置き換えます。

このデバイスがネットワーク管理者によって合法的にセットアップされた場合、そのCA証明書を取得できるはずです(そのような状況では、CA証明書は通常、集中管理されているすべてのエンドユーザーマシンにインストールされます)。

開発者として、自分のマシンをインストールしていて、CA証明書がインストールされていない可能性があります。ネットワーク管理者にそのCA証明書を要求し、ブラウザーとPHP内のcurl(2つの異なる場所)で使用される証明書を使用してインストールします。curlのデフォルトの場所は、使用しているシステムによって異なる場合がありますが、を使用して構成することもできますCURLOPT_CAINFO

おそらく、ローカルネットワーク内で開発していますが、完了したら、そのサービスを別のネットワークに展開する可能性があります。これが構成可能であることを確認してください。

于 2012-10-10T10:40:50.450 に答える
0

そうです、cURLがSSLが検証されているかどうかを確認しようとしたときに発生します。Facebookには通常、検証済みの署名がありますが、ネットワークが原因である可能性があり、無効になっています(私の場合、fortiguardプロキシを使用すると、Facebookがブロックされます!)

したがって、できることは、そのエラーを完全に無視することを選択できるということです。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

それはそれを修正する必要があります。ただし、適切に修正したい場合は、プロキシなどを使用するか、サーバーの証明書を取得する必要があります(サーバーの場合)。

于 2012-10-10T10:13:27.163 に答える
-1

SSL用にこれらの2行を追加する必要があります

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);     
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
于 2012-10-10T10:14:49.157 に答える