Secondo questo blogpost Perfect Forward Secrecy (PFS) è fornito da:
Anything on the Algorithm Standard Name list that start with TLS (Transport Level Security) followed by a type of DHE (Diffie-Hellman Exchange).
es. TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA
Voglio ottenere questo risultato utilizzando la proprietà jdk.tls.disabledAlgorithms di Java nel file java.security. In questo momento ho i seguenti valori per quella proprietà:
jdk.tls.disabledAlgorithms = SSLv3, TLSv1, TLSv1.1, RC4, MD5, DESede, DH keySize < 768, RSA keySize < 2048
E il seguente è il risultato di 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
Non riesco ancora a trovare un meccanismo per sbarazzarsi di suite che non forniscono PFS. Per esempio. 'DHE_RSA_WITH_AES_128_CBC_SHA'.
Possiamo farlo con 'jdk.tls.disabledAlgorithms'? In caso contrario, esiste un altro meccanismo a livello JVM?
Aggiorna :
Dopo che @Steffen ha confermato che tutte le mie precedenti crittografie elencate fornivano PFS, ho provato di nuovo con un altro server e ho visto che RSA veniva elencato come un algoritmo di scambio di chiavi. Questa volta ho provato con 2 strumenti, entrambi consigliati da OWASP
jdk.tls.disabledAlgorithms = SSLv3, TLSv1, TLSv1.1, RC4, MD5, DESede, RSA keySize < 2048
NOTA: impostazione 'DH keySize < 2048 'l'uso di questa proprietà non ha avuto alcun effetto. Ho dovuto usare la proprietà di sistema "-Djdk.tls.ephemeralDHKeySize = 2048" per aumentare la dimensione della chiave DH come raccomandato da @Steffen.
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
Non riesco a specificare RSA come crittografia disabilitata, perché rimuoverà anche RSA dall'elenco di autenticazione, non solo lo scambio di chiavi.
Come posso ottenere PFS tramite una proprietà / configurazione di livello JVM? Sto eseguendo sia il client che il server nella stessa macchina con Java 1.8.0_111