I siti web che mirano a mantenere la massima compatibilità con i browser (legacy) potrebbero voler servire catene di certificati firmati SHA2 a quegli agenti utente che li supportano e SHA1 a quelli che non lo fanno.
Il codice TLS 1.2 ( link ) definisce una nuova estensione signature_algorithm che, quando inviato dal browser, può essere utilizzato per rilevare il supporto per SHA2. Ad esempio, se il browser include "SHA256 / RSA" sta dicendo al server che supporta questa specifica coppia di algoritmi hash / firma. Il server può quindi selezionare una catena compatibile e restituirla, oppure tornare a qualcosa di simile a "SHA / RSA".
Ci sono due problemi principali che si basano su questa estensione, tuttavia:
- RFC 5246 specifica che è facoltativo (vedere la sezione 7.4.1.4.1)
If the client supports only the default hash and signature algorithms (listed in this section), it MAY omit the signature_algorithms extension. If the client does not support the default algorithms, or supports other hash and signature algorithms (and it is willing to use them for verifying messages sent by the server, i.e., server certificates and server key exchange), it MUST send the signature_algorithms extension, listing the algorithms it is willing to accept.
- Alcuni browser (ad esempio, Android 2.3-4.3) supportano SHA2 ma non TLS 1.2 (vedi matrice di funzioni )
- Se la logica lato server richiede l'estensione, potrebbe "overserver" i certificati SHA1 ai client che potrebbero altrimenti elaborare SHA2.
Considerate le due precedenti carenze, c'è qualche altra parte del messaggio di handshake TLS ClientHello che può essere usato per rilevare il supporto SHA2?
Il pensiero originale era vedere se SHA256 appariva nel campo PRF / MAC di una suite di crittografia (ad esempio, lo SHA256 alla fine di TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256), ma sembra che anche questi saranno presenti solo a partire da TLS 1.2).