Ich habe einen Ubuntu 12.04.2 LTS-Server, auf dem Apache 2.2.22 mit mod_ssl und OpenSSL v1.0.1 ausgeführt wird.
In meiner vhosts-Konfiguration (alles andere, was sich erwartungsgemäß verhält) habe ich die SSLProtocol
Zeile mit -all +SSLv3
.
Mit dieser Konfiguration sind TLS 1.1 und 1.2 aktiviert und funktionieren ordnungsgemäß - was für mich nicht intuitiv ist, da ich davon ausgehen würde, dass bei dieser Konfiguration nur SSLv3 aktiviert wird.
Ich kann TLSv1 ganz gut mit aktivieren / deaktivieren -/+TSLv1
, und es funktioniert wie erwartet. Aber +/-TLSv1.1
und +/-TLSv1.2
sind keine gültigen Konfigurationsoptionen - daher kann ich sie nicht auf diese Weise deaktivieren.
Was den Grund betrifft, warum ich das tun möchte - ich habe es mit einer Drittanbieteranwendung zu tun (über die ich keine Kontrolle habe), die bei TLS-fähigen Servern ein fehlerhaftes Verhalten aufweist, und ich muss sie vollständig deaktivieren, um fortzufahren.
Antworten:
Fasziniert von diesem Fehler (und ja, ich konnte ihn reproduzieren) habe ich mir den Quellcode für die neueste stabile Version von angesehen
mod_ssl
und eine Erklärung gefunden. Tragen Sie mit mir, das wird Amateur-Stapel-Überlauf bekommen:Wenn das
SSLProtocol
geparst wurde,char
sieht es ungefähr so aus:Beim Einleiten eines neuen Serverkontexts werden ALLE verfügbaren Protokolle aktiviert, und die oben genannten werden
char
mithilfe einiger geschickter bitweiser UND-Operationen überprüft, um zu bestimmen, welche Protokolle verwendet werden sollen deaktiviert werden sollen . In diesem Fall, in dem SSLv3 das einzige Protokoll ist, das explizit aktiviert wurde, werden die drei anderen deaktiviert.OpenSSL unterstützt eine Protokolleinstellung für TLSv1.1. Da
SSLProtocol
diese Option jedoch nicht berücksichtigt wird, wird sie niemals deaktiviert. OpenSSL v1.0.1 hat einige bekannte Probleme mit TLSv1.2, aber wenn es unterstützt wird, gehe ich davon aus, dass dies auch für TLSv1.1 gilt. es wird von mod_ssl nicht erkannt / behandelt und ist daher niemals deaktiviert.Quellcode- Referenzen für mod_ssl:
SSLProtocol
wird in Zeile 925 in analysiert.pkg.sslmod/ssl_engine_config.c
Die in der obigen Funktion verwendeten Optionen werden in Zeile 444 in definiert
pkg.sslmod/mod_ssl.h
Zeile 586 werden alle Protokolle aktiviert, und in
pkg.sslmod/ssl_engine_init.c
den folgenden Zeilen werden bestimmte Protokolle deaktiviertWie kann ich es dann deaktivieren?
Sie haben einige Möglichkeiten:
Protocols All,-TLSv1.1,-TLSv1.2
mod_ssl
;-)quelle
openssl.cnf
- Der Speicherort hängt von der Installation ab. Auf Debian Squeeze fand ich es unter/etc/ssl/openssl.cnf
, unter OS X unter/System/Library/OpenSSL/openssl.cnf
und unter Windows 7 unter%systemdrive%\openssl\openssl.cnf
.SSLProtocol
auf die gleiche Weise wie oben (SSLProtocol All -TLSv1.1 -TLSv1.2
(es sollten keine Kommas erforderlich sein)), aber unter einer globalen oder spezifischen Apache-Konfiguration, um alle oben erwähnten globalen SSL-Konfigurationen zu überschreiben. (Wenn Sie nicht alle zugrunde liegenden SSL-Verschlüsselungen ändern möchten -> Da die von Ihnen benötigte Verschlüsselung als schwach eingestuft wird.)Das Problem wird auch in den Kommentaren auf der Apache-Seite mod_ssl behandelt: http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#comment_1136
Wenn Ubuntu 12.04 Apache 2.2.23 hätte, wäre das Problem nicht aufgetreten. Nach den Kommentaren ist es möglich, TLSv1.1 und TLSv1.2 zu aktivieren, aber TLSv1.0 ist dann auch aktiviert:
quelle
Zunächst müssen Sie den vhost-Standard für Port 443 in Ihrem Server (den ersten von Apache geladenen SSL-vhost) identifizieren und die Konfigurationsdatei bearbeiten. Die meisten Benutzer haben eine ssl.conf- Datei auf ihren Servern, auf der ein vhost für Port 443 konfiguriert ist. Da der Name dieser Datei mit "s" beginnt, wird sie vor den in vhosts.conf konfigurierten vhosts geladen (was mit "v" beginnt). Überprüfen Sie daher, ob dies der Fall ist (die Antwort lautet für praktisch alle "Ja"), und ändern Sie die Protokolle in dieser Datei . Das ist genug!
Ein ähnliches Problem wurde hier veröffentlicht: Wie deaktiviere ich TLS 1.1 & 1.2 in Apache? . Nach HBruijn:
Und noch eine hier: Ist es möglich, ein SSL-Protokoll in Apache für einen einzelnen VirtualHost (Pudel) festzulegen? . Laut Vallismortis:
Übrigens: Der Standard-vhost auf einem Server ist für einen bestimmten Port derjenige, der die Anforderungen für diesen Port beantwortet, die ohne Angabe eines Servernamens (oder mit einem falschen Servernamen) auf dem Server eintreffen. Beispiel: Eine in die Adressleiste Ihres Browsers eingegebene IP-Adresse oder eine fehlerhafte Weiterleitung aufgrund einer falschen DNS-Tabelle.
quelle