Come disabilitare TLS 1.1 e 1.2 in Apache?


13

Ho un server Ubuntu 12.04.2 LTS che esegue Apache 2.2.22 con mod_ssl e OpenSSL v1.0.1.

Nella mia configurazione vhosts (tutto il resto all'interno del quale si comporta come mi aspetterei), ho la SSLProtocollinea con -all +SSLv3.

Con quella configurazione, TLS 1.1 e 1.2 sono abilitati e funzionano correttamente, il che è controintuitivo per me, poiché mi aspetterei che solo SSLv3 sarebbe abilitato data quella configurazione.

Posso abilitare / disabilitare TLSv1 bene -/+TSLv1e funziona come previsto. Ma +/-TLSv1.1e +/-TLSv1.2non sono opzioni di configurazione valide - quindi non posso disattivare in quel modo.

Per quanto riguarda il motivo per cui vorrei fare questo: ho a che fare con un'applicazione di terze parti (di cui non ho alcun controllo) che ha un comportamento errato con i server abilitati TLS e devo disabilitarlo completamente per andare avanti.


solo per curiosità - potrei chiederti perché vorresti disabilitare TSL in primo luogo? da quello che ho raccolto, dovrebbe essere più sicuro di SSLv1 / 2/3, quindi posso solo immaginare i motivi per voler consentire solo v1.2 e non v1.1 (questo è ciò che mi ha portato qui), ma non per disabilitarlo a favore di SSL, tranne forse alcuni problemi di compatibilità con software più vecchi?
codifica il

@codeling Lavorare con software vecchio, di terze parti, che presenta bug con TLS.
Kyle Lowry,

Risposte:


23

Incuriosito da questo bug (e sì, sono stato in grado di riprodurlo) Ho dato un'occhiata al codice sorgente per l'ultima versione stabile di mod_ssle ho trovato una spiegazione. Abbi pazienza, questo diventerà dilettante-pila-traboccante:

Quando SSLProtocolè stato analizzato, il risultato è charsimile a questo:

0 1 0 0
^ ^ ^ ^
| | | SSLv1
| | SSLv2
| SSLv3
TLSv1

All'avvio di un nuovo contesto server, TUTTI i protocolli disponibili verranno abilitati e quanto sopra charviene ispezionato utilizzando alcune operazioni AND bit per bit per determinare quali protocolli devono essere disabilitati . In questo caso, dove SSLv3 è l'unico protocollo ad essere stato esplicitamente abilitato, gli altri 3 saranno disabilitati.

OpenSSL supporta un'impostazione del protocollo per TLSv1.1, ma poiché SSLProtocolnon tiene conto di queste opzioni, non viene mai disabilitato. OpenSSL v1.0.1 ha alcuni problemi noti con TLSv1.2 ma se è supportato suppongo che lo stesso valga per TLSv1.1; non è riconosciuto / gestito da mod_ssl e quindi mai disabilitato.

Riferimenti del codice sorgente per mod_ssl:

SSLProtocolviene analizzato alla riga 925 in pkg.sslmod/ssl_engine_config.c
Le opzioni utilizzate nella funzione precedente sono definite alla riga 444 in pkg.sslmod/mod_ssl.h
Tutti i protocolli vengono abilitati alla riga 586, pkg.sslmod/ssl_engine_init.cdopodiché protocolli specifici vengono disabilitati sulle righe successive

Come disabilitarlo allora?

Hai alcune opzioni:

  1. Disabilitalo nel file di configurazione OpenSSL con:
    Protocols All,-TLSv1.1,-TLSv1.2
  2. Riscrivi mod_ssl;-)

Sembra una risposta perfetta, devi solo verificare: quale / cosa / dove file di configurazione OpenSSL?
Kyle Lowry,

openssl.cnf- la posizione dipende dall'installazione. Su Debian Squeeze l'ho trovato su /etc/ssl/openssl.cnf, in OS X su /System/Library/OpenSSL/openssl.cnfe su Windows 7 su %systemdrive%\openssl\openssl.cnf.
Mathias R. Jessen,

1
Sto guardando il file di configurazione ora; la sintassi sembra un po 'diversa da quella che mi aspetterei in base alla tua risposta e non riesco a trovare nulla online che dichiari esplicitamente che puoi controllare i protocolli abilitati / disabilitati da quel file di configurazione. Hai qualche riferimento per questo? Grazie.
Kyle Lowry,

Un'altra opzione: utilizzare: SSLProtocolnello stesso modo sopra ( SSLProtocol All -TLSv1.1 -TLSv1.2(non dovrebbero essere necessarie virgole)) ma in una configurazione Apache globale o specifica per "sovrascrivere" qualsiasi configurazione globale SSL sopra menzionata. (Se non desideri modificare tutte le cifre SSL sottostanti -> Poiché la cifra che ti serve è considerata debole.)
bshea


1

Prima di tutto, devi identificare qual è il vhost predefinito per la porta 443 nel tuo server (il primo vhost SSL caricato da Apache) e modificarne il file di configurazione. La maggior parte degli utenti ha un file ssl.conf nei propri server, con un vhost per la porta 443 lì configurato. Poiché il nome di questo file inizia con "s", verrà caricato prima dei vhosts configurati in vhosts.conf (che inizia con "v"). Quindi, controlla se questo è il tuo caso (la risposta è "sì" praticamente per tutti) e cambia i protocolli in quel file . È abbastanza!

Un problema simile è stato pubblicato qui: Come disabilitare TLS 1.1 e 1.2 in Apache? . Secondo HBruijn:

A meno che non si disponga di IP VirtualHosts, in pratica le impostazioni dalla prima occorrenza della direttiva SSLProtocol sono utilizzate per l'intero server e / o tutti gli host virtuali basati su nomi che supportano TLS

E un altro qui: è possibile impostare un protocollo SSL in Apache per un singolo VirtualHost (barboncino)? . Secondo vallismortis:

È 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.

A proposito: il vhost predefinito in un server, per una determinata porta, è quello che risponde alle richieste per quella porta, che arrivano al server senza un'identificazione del nome del server (o con un nome del server errato). Esempio: un IP digitato nella barra degli indirizzi del browser o un reindirizzamento errato causato da una tabella DNS errata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.