È possibile impostare SSLProtocol solo per il primo VirtualHost nel file di configurazione. Tutte le successive voci di VirtualHost erediteranno tale impostazione dalla prima voce e ignoreranno silenziosamente la propria impostazione a causa di un bug OpenSSL .
Esiste una segnalazione di bug corrispondente per mod_ssl , ma come descritto nella segnalazione di bug, il problema deve essere risolto in OpenSSL (il certificato è ereditato ma non i protocolli).
Le suite di cifratura devono essere impostate in modo indipendente per ciascun VirtualHost, altrimenti finirai con l'elenco predefinito, incluso un sacco di cifre non sicure. Inoltre, tenere presente che i client meno recenti che non supportano l'indicazione del nome server (SNI) utilizzeranno sempre l'host predefinito (a meno che non venga bloccatoSSLStrictSNIVHostCheck
), il che può confondere i test.
In breve, dovresti essere in grado di specificare suite di cifratura personalizzate e certificati per ciascun host virtuale, ma fino a quando il bug non viene corretto non aspettarti un comportamento corretto con i protocolli personalizzati per ciascun host virtuale.
Ho riscontrato questo problema con Apache 2.4 e modssl con OpenSSL 1.0.1k e mi aspetto che Apache 2.2 sia soggetto agli stessi problemi.
Aggiornamento (ottobre 2016): il bug OpenSSL è stato contrassegnato come risolto il 13 ottobre 2016. Tuttavia, faceva parte di una chiusura di massa di problemi aperti e sebbene fosse stata fornita una "correzione parziale", il problema non era mai stato completamente risolto.
Aggiornamento (aprile 2018): il bug OpenSSL reinviato ora ha una patch disponibile (dal 9 aprile 2018). Questa patch cambierà il comportamento delle istanze di Apache configurate con più host virtuali SNI:
Rifiuta connessioni non conformi al protocollo SSL vhost
Questo è stato sviluppato e testato con 2.4.27 e in produzione con quella versione. La patch è stata modificata per 2.4.33 e leggermente testata.
In questo modo viene verificata la versione della connessione rispetto al protocollo SSL configurato per l'host virtuale che corrisponde alla SNI. Poiché la connessione viene inizialmente stabilita con il protocollo SSL configurato per l'host predefinito per la porta, l'host predefinito deve includere tutti i protocolli che saranno supportati da qualsiasi host virtuale.
Questa patch aggiunge un ulteriore stato di ritorno di APR_EMISMATCH alla funzione init_vhost in modo che il callback ssl_callback_ServerNameIndication registrato con OpenSSL possa restituire un avviso irreversibile SSL_AD_PROTOCOL_VERSION. Questo ha lo scopo di produrre la stessa risposta a ClientHello della specifica di un protocollo SSL che non include la versione in questione. Poiché il callback SNI viene chiamato durante l'elaborazione di ClientHello e prima che venga prodotta una risposta, sembra fare esattamente questo.
Se vedi improvvisamente messaggi del seguente formato:
Rejecting version [version] for servername [hostname]
Quindi dovresti ricontrollare il SSLProtocol
tuo host predefinito.
SSLStrictSNIVHostCheck
sono molto apprezzate. Tuttavia, si dovrebbe anche notare dalla documentazione citata che Se impostato su attivo in qualsiasi altro host virtuale, i client ignari SNI non sono autorizzati ad accedere a questo particolare host virtuale .