Facebook のような https API からコンテンツを取得するときに、SSL 証明書バンドルが必要な理由をよく理解できたと思います。しかし、私の質問は次のとおりです。証明書がなくてもこれが機能する場合とそうでない場合があるのはなぜですか? libcurl には、この問題を独自に解決する方法があるように思えます。
なぜ、またはどのようにこれが起こるか知っている人はいますか?誰も同じ経験をしましたか?
Facebook のような https API からコンテンツを取得するときに、SSL 証明書バンドルが必要な理由をよく理解できたと思います。しかし、私の質問は次のとおりです。証明書がなくてもこれが機能する場合とそうでない場合があるのはなぜですか? libcurl には、この問題を独自に解決する方法があるように思えます。
なぜ、またはどのようにこれが起こるか知っている人はいますか?誰も同じ経験をしましたか?
SSL 証明書に関する cUrl の動作は、CURLOPT_SSL_VERIFYPEER オプションによって異なります。PHP を使用すると仮定すると、関数curl_setoptを使用してこのオプションの値を変更できます。
私は SSL の表面的な知識しか持っていませんが、cUrl は次のように動作するようです: 0 はチェックしないことを意味し、1 は証明書が正当かどうかをチェックし、2 は証明書が正しいホスト名に発行されているかどうかもチェックします。
CURLOPT_SSL_VERIFYPEER を 0 に設定することで「厄介なエラーをオフにする」ことができますが、これは、誰かがDNS を偽装する可能性があるため、正しいサーバーに接続できるかどうかを確認できないことを意味します。そのため、非常に危険です。
公式の facebook php sdk は、 CURLOPT_CAINFOを使用して独自の証明書を提供しますが、curl が独自に証明書を検証できなかった場合のみです。Facebook SDK の開発者がこれを条件付きにする理由がわかりません。おそらく、証明書の読み取りにコストがかかる可能性があるためです。