web-dev-qa-db-ja.com

CBCモードの暗号を無効にする方法

Openssl暗号スイートリストを使用するアプリでCBCモード暗号スイートを無効にする簡単なブラックリストスタイルの方法はありますか?私は!RC4のスタイルで何かを期待していますが、!CBCは効果がなく、TLS_DHE_RSA_WITH_AES_128_CBC_SHA256などのスイートを許可します。

私がこれまでに見つけた唯一の解決策は、非CBC暗号のみを含むはるかに詳細なホワイトリストを使用することです。より簡単な代替手段はありますか?

15
Synchro

ドキュメント(man ciphers) に記載されている暗号文字列のリストによると、すべてのCBC暗号を説明する文字列はありません。これは、単純な!CBCまたは同様のものを使用して、これらすべて(およびこれらのみ)を無効にする簡単な方法がないことを意味します。

3
Steffen Ullrich

!SHA1:!SHA256:!SHA384を使用して、すべてのCBCモード暗号を無効にすることができます。 CBC以外の誤検知もいくつか無効になります(RC4NULL)が、とにかく無効にすることもできます。

GCMおよびCHACHA20暗号の名前にはSHA*が含まれていますが、独自のMACアルゴリズムを使用しているため無効化されていません。名前のSHA*MACではなくPRF

15
imgx64

過去数日間、ssllabの完全なリストを取得するためにかなりの時間を費やしました。これのおかげで、これが機能します:

SSLCipherSuite ALL:!RSA:!CAMELLIA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SHA1:!SHA256:!SHA384
5
Bill Cheswick

これを直接行う方法はありませんが、少しスクリプトを書くことができます。

最初の暗号スイート文字列が!3DES:HIGHであるとしましょう。 (おそらく、最初はより優れた暗号スイート文字列が必要ですが、それは良い出発点であり、この答えをあまり乱雑にしないでしょう。)

今、これを行います:

$ openssl ciphers '!3DES:HIGH' \
    | sed -e 's/:/\n/g' \
    | grep -v GCM \
    | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/:!/g' -e 's/^/!/'

行ごとの説明:

  1. 「本当に」欲しい暗号のセットから始めましょう
  2. :で区切られたリストを1行に1つの暗号スイートに分割する
  3. 明示的にGCMを言わないものはすべて削除します
  4. ファイル全体を一度に読み取り、改行を:!に置き換え、最初に!を追加します

次に、この出力を取得して、暗号スイート文字列の前に配置します。最初の暗号スイート文字列が変更されたとき、または新しい暗号がOpenSSLまたはそのHIGHのデフォルトリストに追加された場合に、後でこのプロセスを再実行したい場合があるため、オリジナルを破棄しないでください。

1