web-dev-qa-db-ja.com

ApacheでTLS 1.1および1.2を無効にする方法は?

私は、Apache 2.2.22とmod_sslおよびOpenSSL v1.0.1を実行しているUbuntu 12.04.2 LTSサーバーを持っています。

私のvhosts構成(期待どおりに動作する他のすべてのもの)には、SSLProtocol行に-all +SSLv3があります。

その構成では、TLS 1.1と1.2が有効になり、正しく機能します。これは、その構成でonly SSLv3が有効になることを期待しているため、私には直観に反しています。

-/+TSLv1を使用すると、TLSv1を有効または無効にでき、期待どおりに機能します。ただし、+/-TLSv1.1+/-TLSv1.2は有効な構成オプションではないため、このように無効にすることはできません。

なぜこれをしたいのか-TLSが有効なサーバーでバグのある動作をするサードパーティのアプリケーション(私が制御できない)を扱っているので、先に進むには完全に無効にする必要があります。

13
Kyle Lowry

このバグに興味をそそられました(そうです、私はそれを再現することができました)mod_sslの最新の安定バージョンのソースコードを見て、説明を見つけました。私と一緒に耐えてください、これはアマチュアスタックオーバーフローを取得するつもりです:

SSLProtocolが解析されると、charは次のようになります。

0 1 0 0
^ ^ ^ ^
| | | SSLv1
| | SSLv2
| SSLv3
TLSv1

新しいサーバーコンテキストを開始すると、利用可能なすべてのプロトコルが有効になり、上記のcharは、ビットごとのAND演算を使用して検査され、どのプロトコルを無効にするか無効。この場合、SSLv3が明示的に有効にされた唯一のプロトコルであり、他の3つは無効になります。

OpenSSLはTLSv1.1のプロトコル設定をサポートしますが、SSLProtocolはこのオプションを考慮しないため、無効になることはありません。 OpenSSL v1.0.1にはTLSv1.2に関するいくつかの既知の問題がありますが、サポートされている場合、TLSv1.1の場合と同じことが当てはまると思います。 mod_sslによって認識/処理されないため、無効化されることはありません。

ソースコード mod_sslの参照:

SSLProtocolpkg.sslmod/ssl_engine_config.cの925行目で解析されます
上記の関数で使用されるオプションは、pkg.sslmod/mod_ssl.hの444行で定義されています
pkg.sslmod/ssl_engine_init.cの586行目ですべてのプロトコルが有効になり、その後、特定のプロトコルが後続の行で無効になります

それを無効にする方法は?

いくつかのオプションがあります。

  1. OpenSSL構成ファイルで次のように無効にします。
    Protocols All,-TLSv1.1,-TLSv1.2
  2. 書き直すmod_ssl ;-)
23

この問題は、mod_ssl Apacheページのコメントでも対処されます。 http://httpd.Apache.org/docs/2.2/mod/mod_ssl.html#comment_1136

Ubuntu 12.04にApache 2.2.23があった場合、問題は発生しなかったでしょう。コメントによると、TLSv1.1およびTLSv1.2を有効にすることは可能ですが、TLSv1.0も有効になります。

SSLProtocol All -SSLv2 -SSLv3
2
Coanda

まず、サーバーのポート443のデフォルトの仮想ホスト(Apacheによってロードされる最初のSSL仮想ホスト)を特定し、その構成ファイルを編集する必要があります。ほとんどのユーザーは、サーバーにssl.confファイルを持ち、ポート443の仮想ホストが構成されています。このファイルの名前は「s」で始まるため、vhosts.conf(「v」で始まる)で構成されたvhostsの前にロードされます。したがって、これがあなたのケースであるかどうかを確認し(答えはほぼ全員が「はい」です)、そのファイルのプロトコルを変更します。もういい!

同様の問題がここに投稿されました: ApacheでTLS 1.1&1.2を無効にする方法? 。 HBruijnによると:

IP VirtualHostsがない場合、実際には、SSLProtocolディレクティブの最初の出現からの設定が、サーバー全体および/またはTLSをサポートするすべての名前ベースのVirtualHostsに使用されます

そしてもう1つ: 単一のVirtualHost(プードル)のApacheでSSLProtocolを設定することは可能ですか? 。 vallismortisによると:

SSLProtocolは、構成ファイルの最初のVirtualHostに対してのみ設定できます。後続のすべてのVirtualHostエントリは、最初のエントリからその設定を継承し、OpenSSLのバグのために独自の設定を暗黙的に無視します。

ちなみに、特定のポートに対するサーバーのデフォルトのvhostは、そのポートに対する要求に応答するもので、サーバー名の識別なしで(または間違ったサーバー名で)サーバーに到着します。例:ブラウザーのアドレスバーに入力されたIP、または誤ったDNSテーブルが原因の誤ったリダイレクト。

1
aldemarcalazans