2つの異なるApache2セットアップをテストしました。
最初のケースでは、無料の証明書を提供する http://letsencrypt.org/ が提供するリストを使用しました。リストは次のようになります。
SSLHonorCipherOrder on
SSLCompression off
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256
:ECDHE-ECDSA-AES128-GCM-SHA256
:ECDHE-RSA-AES256-GCM-SHA384
:ECDHE-ECDSA-AES256-GCM-SHA384
:DHE-RSA-AES128-GCM-SHA256
:DHE-DSS-AES128-GCM-SHA256
:kEDH+AESGCM
:ECDHE-RSA-AES128-SHA256
:ECDHE-ECDSA-AES128-SHA256
:ECDHE-RSA-AES128-SHA
:ECDHE-ECDSA-AES128-SHA
:ECDHE-RSA-AES256-SHA384
:ECDHE-ECDSA-AES256-SHA384
:ECDHE-RSA-AES256-SHA
:ECDHE-ECDSA-AES256-SHA
:DHE-RSA-AES128-SHA256
:DHE-RSA-AES128-SHA
:DHE-DSS-AES128-SHA256
:DHE-RSA-AES256-SHA256
:DHE-DSS-AES256-SHA
:DHE-RSA-AES256-SHA
:AES128-GCM-SHA256
:AES256-GCM-SHA384
:AES128-SHA256
:AES256-SHA256
:AES128-SHA
:AES256-SHA
:AES
:CAMELLIA
:DES-CBC3-SHA
:!aNULL
:!eNULL
:!EXPORT
:!DES
:!RC4
:!MD5
:!PSK
:!aECDH
:!EDH-DSS-DES-CBC3-SHA
:!EDH-RSA-DES-CBC3-SHA
:!KRB5-DES-CBC3-SHA
警告:サイファーのリストはApache2では1つの長い行であると想定されていますが、ここで読みやすくするために、1行に1つの暗号で分割しました。
そのリストをテストすると
https://www.ssllabs.com/ssltest/analyze.html?d=<domain.tld>
私は得ます:
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) ECDH secp256r1 FS 128 (eq. 3072 bits RSA)
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) ECDH secp256r1 FS 256 (eq. 3072 bits RSA)
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e) DH 2048 bits FS 128
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x9f) DH 2048 bits FS 256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027) ECDH secp256r1 FS 128 (eq. 3072 bits RSA)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013) ECDH secp256r1 FS 128 (eq. 3072 bits RSA)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028) ECDH secp256r1 FS 256 (eq. 3072 bits RSA)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014) ECDH secp256r1 FS 256 (eq. 3072 bits RSA)
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (0x67) DH 2048 bits FS 128
TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33) DH 2048 bits FS 128
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (0x6b) DH 2048 bits FS 256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39) DH 2048 bits FS 256
TLS_RSA_WITH_AES_128_GCM_SHA256 (0x9c) 128
TLS_RSA_WITH_AES_256_GCM_SHA384 (0x9d) 256
TLS_RSA_WITH_AES_128_CBC_SHA256 (0x3c) 128
TLS_RSA_WITH_AES_256_CBC_SHA256 (0x3d) 256
TLS_RSA_WITH_AES_128_CBC_SHA (0x2f) 128
TLS_RSA_WITH_AES_256_CBC_SHA (0x35) 256
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (0x88) DH 2048 bits FS 256
TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (0x84) 256
TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (0x45) DH 2048 bits FS 128
TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (0x41) 128
TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa) 112
これで、DHEとECDHEを最初にするという概念が理解できました。これらは、「秘密」を意味する「FS」で明確にマークされています(つまり、ハッカーが何らかの方法で秘密鍵を入手できたとしても、メッセージは今後も秘密のままです。少なくともキュービットが現実になるまでは。)
私が疑問に思っているのは、「128」、次に「256」という数字の列です。暗号化ビットの少ない暗号を最初に置くのはなぜですか?暗号化は安全ですか?データを暗号化するために必要なビットが少ないため、高速になりますか?または、最初に256をすべて配置し、次に128、最後に112を配置する必要があります(醜いものを保持する場合は...)
それとも私はその数を完全に誤解しており、順序はすでに可能な限り良いですか?
後で、サーバーでPCIコンプライアンスチェックを実行して得られたセットアップでテストし、そのリストを生成するセットアップを考え出しました。セットアップは次のようになります。
SSLCipherSuite HIGH:MEDIUM:!ADH:!MD5:!aNULL:!eNULL:!LOW:!EXP:!RC4
ものすごく単純!ただし、そのセットアップはSSLHonerCipherOrder
オプションをサポートしていません。そのオプションがonであるかどうかに関係なく、順序はサーバーによって指定されていないと言われています(これはおそらく正しい)。
その場合、Qualys SSL LabsのWebサイトは、暗号を次のように並べ替えます。すべての最小値が最初(112)、次に最大値が最後(256)。それはブラウザが行うことでしょうか?暗号化を続行するために最小ビット数を取得しようとしていますか?それは、データを送信する最も安全な方法ではないでしょうか?
TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa) 112
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (0x16) DH 2048 bits FS 112
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (0xc012) ECDH sect571r1 FS 112 (eq. 15360 bits RSA)
TLS_RSA_WITH_AES_128_CBC_SHA (0x2f) 128
TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33) DH 2048 bits FS 128
TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (0x41) 128
TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (0x45) DH 2048 bits FS 128
TLS_RSA_WITH_SEED_CBC_SHA (0x96) 128
TLS_DHE_RSA_WITH_SEED_CBC_SHA (0x9a) DH 2048 bits FS 128
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013) ECDH sect571r1 FS 128 (eq. 15360 bits RSA)
TLS_RSA_WITH_AES_128_CBC_SHA256 (0x3c) 128
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (0x67) DH 2048 bits FS 128
TLS_RSA_WITH_AES_128_GCM_SHA256 (0x9c) 128
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e) DH 2048 bits FS 128
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027) ECDH sect571r1 FS 128 (eq. 15360 bits RSA)
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) ECDH sect571r1 FS 128 (eq. 15360 bits RSA)
TLS_RSA_WITH_AES_256_CBC_SHA (0x35) 256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39) DH 2048 bits FS 256
TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (0x84) 256
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (0x88) DH 2048 bits FS 256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014) ECDH sect571r1 FS 256 (eq. 15360 bits RSA)
TLS_RSA_WITH_AES_256_CBC_SHA256 (0x3d) 256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (0x6b) DH 2048 bits FS 256
TLS_RSA_WITH_AES_256_GCM_SHA384 (0x9d) 256
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x9f) DH 2048 bits FS 256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028) ECDH sect571r1 FS 256 (eq. 15360 bits RSA)
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) ECDH sect571r1 FS 256 (eq. 15360 bits RSA)
SSLHonorCipherOrder
について誤解しているようです。 Doc は、「通常client'sプリファレンスが使用されます。このディレクティブが有効になっている場合、server'sプリファレンス代わりに使用されます。」したがって、オプションの名前は間違っています。PICK_THE_CIPHER_PER_SERVER'S_ORDERING_AND_DONT_RESPECT_THE_CLIENT'S_ORDERINGのような名前にしてください。
重要な情報は、デフォルトのTLS/SSLv3暗号ネゴシエーションが、Apache docが通常主張するように機能しないことです。まあそれはキューバが米国と交渉するのと同じくらい「交渉」です。 [〜#〜] rfc [〜#〜] は、最初のメッセージでクライアントが可能な暗号のリストを送信することを示します。順序付きリストですか?本当にサーバーに依存します。暗号の1つがサーバーによって選択されます。サーバーが決定します。クライアントは、セッション全体を続行または再開することしかできません。 サーバーは完全なリストを表示しないため、クライアントがそこから何かを選択することはできません。
SSLHonorCipherOrder off
(通常のApache)は、サーバーが放棄し、自身のSSLCipherSuite
を順序付けられていないリストとして扱い始め、代わりにクライアントの命題を信頼できる順序付けされたリストとして扱います。最初にサポートされる暗号は盲目的に使用されます。 on
を使用すると、サーバーはクライアントの命題を順不同として扱います。サーバーの設定(常に内部)はSSLCipherSuite
リストです。
したがって、SSLHonorCipherOrder
なしのssllabsテストは、ssllabsの優先順位が何であるかを単に示すだけなので、役に立ちません。オプションがHIGH:MEDIUM:etc
でサポートされていないというのは真ではない:私のサイトでは問題なく動作し、ssllabsはHIGH
スイートを最初に表示します。レポートには、当然のことながら、サーバーコマンドopenssl ciphers 'HIGH:MEDIUM:etcxxx'
とまったく同じ暗号順序が表示されます。
そして最後のポイント。 「弱い-強い-強い」暗号スイートは意味をなさず、不均衡です。 RSA 2048は弱い。ウィキペディアによれば、これは112ビットと推定されています。そして、RSAが壊れている場合は、さようならhttps、さようならman-in-the-middleです。したがって、非常に弱いRSA 2048を備えた、途方もなく強力なAES256に参加することはほとんど意味がありません。CPUの浪費です。 RSA証明書の破棄を開始し、できるだけ早くECDSAとして証明書を再発行する必要があります。これにより、最初のプロセッサーフレンドリーでバランスのとれた安全な暗号スイート(つまり、ECDHE-ECDSA-AES128-GCM-SHA256)を作成できます。
私はあなたの質問をこれらの質問に減らすことができると思います: