SNI と HTTP 提供ドメイン間の競合

SNI と HTTP 提供ドメイン間の競合

最近、小さなストアを備えた WordPress ウェブサイトを、ホスティング プロバイダーから、Ubuntu Server 12.04.2 LTS と Apache 2.2.22 を実行している自分のサーバーに移動しました。ストアには SSL が必要です。サーバーの新しい IP にいくつかのシンプルな vhost をセットアップしました。1 つは特定の IP のポート 80 にバインドし、もう 1 つはポート 443 にバインドします。両方のvhost 構成にServerName www.example.comと があります。 があります。ServerAlias example.comSSLStrictSNIVHostCheck off

サイトの動作は非常に遅いですが、動作しています。エラー ログには次の内容が記録されています。

[Error] Hostname example.com provided via SNI and hostname www.example.com provided via HTTP are different

速度低下は上記のメッセージに関係していると思います。なぜこのメッセージが表示されるのか、また、それに対して何ができるのか、何かアイデアはありますか?

答え1

アクセス ログ (エラー ログではありません) を確認してください。エラーの日時がわかれば、問題となっているリクエストを特定し、ユーザー エージェントを見つけることができます。私の場合は、ボットでした。

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)"

サーバーは HTTP 400: Bad Request で応答します。

私が間違っていなければ、TLS ネゴシエーションでは、クライアントはホスト名を 2 回送信します。1 回は SSL 接続が確立される前に SNI (Server Name Indication) で送信され、もう 1 回は実際の HTTP 要求で送信されます。サーバー名が一致しない場合は、クライアントが壊れていることを示しており、サーバーの構成方法とは関係ありません。

おそらく彼らはいつかボットを修正するでしょうが、その間は無視してかまいません。リクエストが非常に高いレートで来ない限り、これがホストの速度低下を引き起こすことはないと思います。

答え2

このエラーはおそらく意図的に一部のクライアントは、サーバーの脆弱性をテストするために、 からのリクエストを使用しています。私が管理しているサーバーで、 からのリクエストによってエラーがトリガーされたことがわかりましたresearchscan367.eecs.umich.edu。この場合、エラーが発生したことは良いことです。

どのような攻撃が可能なのか興味があったので、Security Stack Exchange で次のような質問をしました。Apache2 のエラーコード AH02032 によってどのような攻撃が防止されますか?

答え3

私の場合、アンダースコア付きの新しい仮想ホストの作成が問題でした。ワイルドカード SSL 証明書を持っています。

動作しませんでした:

<VirtualHost *:443>
        SSLEngine on
        ServerName sub_domain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>

Apache は正常に再起動しましたが、HTTP 400 エラーが発生しました。エラー ログには次のように表示されます。

[Wed Sep 05 11:28:00.349960 2018] [ssl:error] [pid 19906:tid 140392626808576] AH02031: Hostname sub_domain.example.com provided via SNI, but no hostname provided in HTTP request

しかし、アンダースコアを削除するとうまくいきました:

<VirtualHost *:443>
        SSLEngine on
        ServerName subdomain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>

答え4

/etc/hostsファイルをチェックして、ドメイン名をローカル(内部)IPアドレスに割り当てているかどうかを確認します。/etc/hostsを変更した後は、ネームサービスキャッシュデーモンを再起動することを忘れないでください。service nscd restart

関連情報