Come applicare Perfect Forward Secrecy usando le proprietà JVM?

4

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.

TestSSLServer

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

testssl.sh

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

    
posta drox 20.12.2016 - 11:07
fonte

2 risposte

2

È possibile applicare il segreto in avanti elencando tutte le suite di crittografia che il Qualys SSLtest chiama "debole" a jdk.tls.disabledAlgorithms in java.security . Vedi la risposta di Bart Mortelmans su link .

Ho finito con questo:

[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

Potrebbero esserci alcune cose inefficienti, inutili o doppie, ma mi dà un voto A e ha anche impedito allo strumento di sicurezza di Chrome di lamentarsi di AES_256_CBC with HMAC-SHA1 , che definisce "un codice obsoleto".

    
risposta data 23.08.2018 - 15:22
fonte
1

Tutte le suite di crittografia che offri forniscono PFS perché queste sono tutte suite di crittografia DHE ed ECDHE. L'RSA in DHE_RSA_WITH_AES_128_CBC_SHA specifica solo che RSA è utilizzato per l'autenticazione. Ma DHE è usato per lo scambio di chiavi, che è la parte importante con PFS.

A parte questo: permetti comunque una dimensione della chiave DH di 768 bit che è considerata debole. Usa almeno 1024 bit ma meglio 2048 per DH.

    
risposta data 20.12.2016 - 12:04
fonte

Leggi altre domande sui tag