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


13

Apache 2.2.22とmod_sslおよびOpenSSL v1.0.1を実行するUbuntu 12.04.2 LTSサーバーがあります。

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

その構成では、TLS 1.1および1.2が有効になり、正しく機能します。これは、その構成で SSLv3 のみが有効になると予想されるため、直感に反します。

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

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


好奇心から-そもそもなぜTSLを無効にしたいのかと聞かれますか?私が集めたものから、それはSSLv1 / 2/3よりも安全であると想定されているので、v1.1ではなくv1.2のみを許可したい理由を想像することしかできません(それが私をもたらした理由です)、それを無効にするためではありません古いソフトウェアとの互換性の問題を除いて、SSLを支持しますか?
2014年

@codeling TLSにバグがある古いサードパーティのソフトウェアを操作します。
カイルローリー14年

回答:


23

このバグに興味を持ち(そして、はい、私はそれを再現することができました)、最新の安定バージョンのソースコードを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
すべてのプロトコルは、行586で有効になり、pkg.sslmod/ssl_engine_init.cその後、特定のプロトコルは後続の行で無効になります

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

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

  1. OpenSSL構成ファイルで以下を使用して無効にします。
    Protocols All,-TLSv1.1,-TLSv1.2
  2. 書き換えるmod_ssl;-)

完璧な答えのように見えますが、確認する必要があるのは、OpenSSLの構成ファイルが何であるか、何であるか、ということだけです。
カイルローリー

openssl.cnf-場所はインストールに依存します。Debian squeezeで/etc/ssl/openssl.cnf、OS Xで/System/Library/OpenSSL/openssl.cnf、Windows 7でを見つけました%systemdrive%\openssl\openssl.cnf
マティアスR.ジェッセン

1
現在、構成ファイルを見ています。構文はあなたの答えに基づいて私が期待するものとは少し異なって見え、その設定ファイルから有効/無効にするプロトコルを制御できることを明示的に示すオンラインを見つけることができないようです。そのための参考文献はありますか?ありがとう。
カイルローリー

別のオプション-使用:SSLProtocol上記と同じ方法(SSLProtocol All -TLSv1.1 -TLSv1.2コンマは不要)であるが、グローバルまたは特定のApache構成の下で、上記のSSLグローバル構成を「オーバーライド」する。(あなたはすべての基本となるSSL暗号を変更したくない場合- >必要な暗号が弱いと考えられるため。)
bshea

2

この問題は、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

1

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

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

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.