Che cosa significa questa assurdità? Che cosa posso fare sulla vulnerabilità di JavaScript javascript TLS 1.0 sul mio server?
A cosa dovrei passare? Devo ignorare l'exploit SSL BEAST e continuare a preferire AES?
Un'analisi approfondita delle diverse selezioni di cipher e del loro impatto: Quali codici devo usare nel mio server web dopo la configurazione il mio certificato SSL?
La stringa di codice
Prendiamo queste informazioni e ispezioniamo la stringa di codice Apache predefinita così com'è Scrivo questo:
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
Questo in pratica consente qualsiasi codice che si autentica. Gli scambi Anonimo Diffie-Hellman ( ADH
) sono esclusi dalla considerazione ( !
), ma tutto il resto è solo ammassato lì. Infatti, dato il ALL
all'inizio, solo !ADH
sta avendo un effetto. Tutto è già incluso. Esportare cifre, cifrari di bassa qualità (40/56 bit, ecc.) Sono tutti giochi giusti per la negoziazione.
Se vogliamo essere molto semplici, RC4 (simmetrico), RSA (scambio e firma asimmetrici) e SHA1 (hash simmetrico) sono universalmente supportati. RC4 ha alcuni punti deboli accademici, ma è immune all'attacco BEAST ed è anche ciò che il mio browser negozia per parlare con Google.
SSLCipherSuite 'ECDHE-RSA-RC4-SHA:RC4+SHA1+RSA'
Verifica:
$ openssl ciphers -v 'ECDHE-RSA-RC4-SHA:RC4+SHA1+RSA'
ECDHE-RSA-RC4-SHA SSLv3 Kx=ECDH Au=RSA Enc=RC4(128) Mac=SHA1
RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1
Che si occupa di impostarlo e dimenticarlo. Ho messo davanti ECDHE-RSA-RC4-SHA perché sono un fan dell'uso della perfetta segretezza in avanti , ma non è universalmente supportato.
Per riferimento futuro, tuttavia, ecco alcune altre cose da considerare se stai costruendo una stringa che specifica genericamente le cifre:
- Nessuna "esportazione" debole:
!EXP
- Nessuna borsa Diffie-Hellman non autenticata:
!ADH
- Non stiamo utilizzando una chiave pre-condivisa, quindi
!PSK
Aggiungi sui codici che ti interessano in seguito. Usa ulteriori esclusioni se devi limitare qualcosa. Seleziona combinazioni specifiche utilizzando il segno +
invece dei due punti. Ad esempio:
$ openssl ciphers -v '!ADH:AES+DH'
DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1
DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1
è diverso da:
$ openssl ciphers -v '!ADH:AES:DH'
ECDHE-RSA-AES256-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1
ECDHE-ECDSA-AES256-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1
DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1
AECDH-AES256-SHA SSLv3 Kx=ECDH Au=None Enc=AES(256) Mac=SHA1
ECDH-RSA-AES256-SHA SSLv3 Kx=ECDH/RSA Au=ECDH Enc=AES(256) Mac=SHA1
ECDH-ECDSA-AES256-SHA SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=AES(256) Mac=SHA1
AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1
PSK-AES256-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=AES(256) Mac=SHA1
ECDHE-RSA-AES128-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1
ECDHE-ECDSA-AES128-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA1
DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1
AECDH-AES128-SHA SSLv3 Kx=ECDH Au=None Enc=AES(128) Mac=SHA1
ECDH-RSA-AES128-SHA SSLv3 Kx=ECDH/RSA Au=ECDH Enc=AES(128) Mac=SHA1
ECDH-ECDSA-AES128-SHA SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=AES(128) Mac=SHA1
AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
PSK-AES128-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=AES(128) Mac=SHA1
DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(256) Mac=SHA1
DHE-DSS-CAMELLIA256-SHA SSLv3 Kx=DH Au=DSS Enc=Camellia(256) Mac=SHA1
EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1
EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1
DHE-RSA-SEED-SHA SSLv3 Kx=DH Au=RSA Enc=SEED(128) Mac=SHA1
DHE-DSS-SEED-SHA SSLv3 Kx=DH Au=DSS Enc=SEED(128) Mac=SHA1
DHE-RSA-CAMELLIA128-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(128) Mac=SHA1
DHE-DSS-CAMELLIA128-SHA SSLv3 Kx=DH Au=DSS Enc=Camellia(128) Mac=SHA1
EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH Au=RSA Enc=DES(56) Mac=SHA1
EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH Au=DSS Enc=DES(56) Mac=SHA1
EXP-EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH(512) Au=RSA Enc=DES(40) Mac=SHA1 export
EXP-EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH(512) Au=DSS Enc=DES(40) Mac=SHA1 export
È un problema degno di questo nome?
Stiamo soppesando le vulnerabilità accademiche. RC4 è accademicamente più debole di AES. AES è accademicamente più debole se si ottiene che il client esegua codice indesiderato.
È utile essere informati dei rischi, ma dopo aver fatto qualche ricerca, le persone si imbattono in questo problema a seguito delle scansioni PCI-DSS. L'auditor vede questo nel suo strumento automatico e reagisce. Se l'utente finale sta eseguendo codice indesiderato, si è verificato un problema di root più grande: il tuo sito è stato compromesso da qualcosa come XSS e devi risolvere il problema o il loro computer è stato violato (direttamente o in esecuzione da un altro sito) e l'autore dell'attacco può probabilmente eseguire ancora più software dannoso. I browser moderni dovrebbero adattarsi eliminando un pacchetto di un byte all'inizio della connessione per avviare il padding e annullare anche l'attacco.
In molti modi, è davvero sul client qui. Se hai intenzione di preoccuparti della privacy del cliente, assicurarti che il tuo sito non sia compromesso è il problema di ordine superiore nella mia mente. Dato che, SSL non fa molto per aiutare un client che sta eseguendo qualcosa di malevolo localmente, quindi ora stiamo tornando a guardare il più potente codice AES.
... ma per passare l'audit senza discutere e guardare i dorsi dei tuoi clienti (in pratica ciò che Google sta cercando di fare con un margine), RC4 ti porta lì oggi. Speriamo che una versione più alta di TLS arrivi lì tutti domani, ma che il progresso è praticamente glaciale.