2012-12-06 23 views
11

CURLOPT_SSL_VERIFYPEERを有効にしてCURLOPT_SSL_VERIFYHOSTを無効のセキュリティ上の影響は何ですか?あなたはそれはあなたが信頼CAによって、それが本物だと発行されたことを信頼して、リモート証明書が有効であることをセキュリティへの影響(libcurlの/ opensslの)

答えて

24
  • CURLOPT_SSL_VERIFYPEERチェック、すなわち。

  • CURLOPT_SSL_VERIFYHOSTは、あなたが話したいエンティティに証明書が発行されたことをチェックします。現実のシナリオと比較する

、VERIFYPEERは、IDの形式は、あなたが認識する1(つまり、あなたが信頼国からパスポート、あなたが知っている会社からのスタッフカード、であることをチェックするようなものです。.. )。 VERIFYHOSTは、あなたが話したかった相手のカードの実際の名前を確認するようなものです。

VERIFYHOSTを使用しない場合(正しい値は1、btwではなく2です)、ホスト名検証を無効にしてMITM攻撃の扉を開きます。信頼するIDのフォームを持つ人は誰でも、信頼できるIDのセット、例えば有効なパスポートを持っている人は、誰でも有効なパスポートを持っているとふりをする可能性があります。

+1

精巧な回答ありがとうございます。これにより、別の簡単な質問が表示されます。有効なSSL証明書 https://www.example.com(必要な場合はcn = www.example.com)のウェブサイトがあります。私がIPアドレスを使ってウェブサイトにアクセスすると、証明書のエラーが表示されます(cnが一致しないため)。SSL_VERIFYHOSTを削除すると解決しますが、MiTM攻撃までは開きます。 これを処理する正しい解決策は何ですか? (エラーを表示せずにIPアドレス経由で接続できるようにする)。 CURLOPT_SSL_CTX_FUNCTIONを使用して検証メソッド全体を置き換えるだけで、特定のIPアドレスがCNと一致することを確認しますか? – user1782427

+0

なぜIPアドレスに接続したいのですか?自分のCAの証明書(または自己署名)ですか? – Bruno

+0

私は2台のサーバ(1.1.1.1と2.2.2.2)を持っています、example.comのDNSは2つのAレコード(それらのIPアドレスの)を含んでいます。クライアントはランダムに1つを選択し、ホスト名ではなくIPアドレスに接続します。私はopenSSLでcommon nameフィールドをチェックするときに私に電話をかけ、example.comと証明書共通名を比較することができます。大丈夫なら証明書を受け入れます。私はlibcurlがそれをサポートしているのを見ていないので、自分で実装する必要があると思います。 example.comの証明書は、信頼できるVerisign証明書です。 – user1782427

関連する問題