このブログ投稿 によれば、Perfect Forward Secrecy(PFS)は以下によって提供されます:
アルゴリズム標準名のリストにあるもので始まる[〜#〜] tls [〜#〜](トランスポートレベルのセキュリティ)以下タイプ[〜#〜] dhe [〜#〜](Diffie-Hellman Exchange)。
例えば。 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、TLS_DHE_RSA_WITH_AES_128_CBC_SHA
Java.securityファイルでJavaの「jdk.tls.disabledAlgorithms」プロパティを使用してこれを実現したいと思います。現在、そのプロパティには次の値があります。
jdk.tls.disabledAlgorithms = SSLv3、TLSv1、TLSv1.1、RC4、MD5、DESede、DH keySize <768、RSA keySize <2048
そして、以下はTestSSLServerによる結果です。
$ Java -jar TestSSLServer.jar 127.0.0.1 9443
Supported versions: TLSv1.2
Deflate compression: no
Supported cipher suites (ORDER IS NOT SIGNIFICANT):
TLSv1.2
DHE_RSA_WITH_AES_128_CBC_SHA
DHE_RSA_WITH_AES_256_CBC_SHA
DHE_RSA_WITH_AES_128_CBC_SHA256
DHE_RSA_WITH_AES_256_CBC_SHA256
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
----------------------
Server certificate(s):
xxxxx
----------------------
Minimal encryption strength: strong encryption (96-bit or more)
Achievable encryption strength: strong encryption (96-bit or more)
BEAST status: protected
CRIME status: protected
それでも、PFSを提供しないスイートを削除するメカニズムを見つけることができませんでした。例えば。 「DHE_RSA_WITH_AES_128_CBC_SHA」。
これを「jdk.tls.disabledAlgorithms」で実行できますか?そうでない場合、他のJVMレベルのメカニズムはありますか?
[〜#〜]更新[〜#〜]:
@Steffenが以前にリストしたすべての暗号がPFSを提供していることを確認した後、別のサーバーで再度テストしたところ、RSAが鍵交換アルゴリズムとしてリストされていることがわかります。今回は2つのツールで試した-どちらも [〜#〜] owasp [〜#〜] で推奨
jdk.tls.disabledAlgorithms = SSLv3、TLSv1、TLSv1.1、RC4、MD5、DESede、RSA keySize <2048
注:このプロパティを使用して「DH keySize <2048」を設定しても効果はありませんでした。 @Steffenが推奨するように、DHキーのサイズを増やすには、システムプロパティ「-Djdk.tls.ephemeralDHKeySize = 2048」を使用する必要がありました。
Supported cipher suites (ORDER IS NOT SIGNIFICANT):
TLSv1.2
RSA_WITH_AES_128_CBC_SHA
DHE_RSA_WITH_AES_128_CBC_SHA
RSA_WITH_AES_256_CBC_SHA
DHE_RSA_WITH_AES_256_CBC_SHA
RSA_WITH_AES_128_CBC_SHA256
RSA_WITH_AES_256_CBC_SHA256
DHE_RSA_WITH_AES_128_CBC_SHA256
DHE_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
Testing all 124 locally available ciphers against the server, ordered by encryption strength
Hexcode Cipher Suite Name (OpenSSL) KeyExch. Encryption Bits
------------------------------------------------------------------------
xc030 ECDHE-RSA-AES256-GCM-SHA384 ECDH 256 AESGCM 256
xc028 ECDHE-RSA-AES256-SHA384 ECDH 256 AES 256
xc014 ECDHE-RSA-AES256-SHA ECDH 256 AES 256
x9f DHE-RSA-AES256-GCM-SHA384 DH 2048 AESGCM 256
x6b DHE-RSA-AES256-SHA256 DH 2048 AES 256
x39 DHE-RSA-AES256-SHA DH 2048 AES 256
x9d AES256-GCM-SHA384 RSA AESGCM 256
x3d AES256-SHA256 RSA AES 256
x35 AES256-SHA RSA AES 256
xc02f ECDHE-RSA-AES128-GCM-SHA256 ECDH 256 AESGCM 128
xc027 ECDHE-RSA-AES128-SHA256 ECDH 256 AES 128
xc013 ECDHE-RSA-AES128-SHA ECDH 256 AES 128
x9e DHE-RSA-AES128-GCM-SHA256 DH 2048 AESGCM 128
x67 DHE-RSA-AES128-SHA256 DH 2048 AES 128
x33 DHE-RSA-AES128-SHA DH 2048 AES 128
x9c AES128-GCM-SHA256 RSA AESGCM 128
x3c AES128-SHA256 RSA AES 128
x2f AES128-SHA RSA AES 128
RSAを認証リストからも削除するため、RSAを無効な暗号として指定することはできません。キー交換だけではありません。
JVMレベルのプロパティ/構成を介してPFSを実現するにはどうすればよいですか? Java 1.8.0_111を使用して、クライアントとサーバーの両方を同じマシンで実行しています。
Qualys SSLtestがjdk.tls.disabledAlgorithms
のJava.security
で「弱い」と呼んでいるすべての暗号スイートを一覧表示することにより、フォワードシークレシーを適用できます。 https://stackoverflow.com/questions/41237075/disabling-specific-weak-ciphers-and-enforcing-perfect-forward-secrecy-using-jvm でBart Mortelmansの回答を参照してください。
私はこれで終わりました:
[root@dolphin12 ~]# grep ^jdk.tls.dis -A6 /usr/lib/jvm/Java/jre/lib/security/Java.security
jdk.tls.disabledAlgorithms=SSLv2Hello, SSLv3, TLSv1, TLSv1.1, DES, DESede, RC4, MD5withRSA, DH keySize < 1024, \
EC keySize < 224, DES40_CBC, RC4_40, \
TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, \
TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, \
TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, \
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, \
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA
そこには非効率的、不必要、または二重のものが含まれている可能性がありますが、Aグレードを与え、ChromeセキュリティツールがAES_256_CBC with HMAC-SHA1
について不平を言うのを防ぎました。時代遅れの暗号」。
提供するすべての暗号スイートは、DHEおよびECDHE暗号スイートであるため、PFSを提供します。 DHE_RSA_WITH_AES_128_CBC_SHAのRSAは、RSAが認証に使用されることのみを指定します。ただし、DHEは、PFSで重要な部分である鍵交換に使用されます。
それとは別に:弱いと見なされる768ビットのDHキーサイズを許可します。 DHには少なくとも1024ビットを使用しますが、2048を使用してください。