Deaktivieren von RC4 in der SSL-Verschlüsselungssuite eines Apache-Servers

17

Bitte lesen Sie die EDIT-Abschnitte in meiner eigenen Antwort. Sie enthalten eine Erklärung für dieses Rätsel .

Ich versuche, RC4 für einen Apache 2.2.9-Server zu deaktivieren, der auf CentOS 6.5 VPS ausgeführt wird, und es scheint, dass ich keinen Erfolg habe.

Ein kürzlich erworbenes, von Unternehmen validiertes Zertifikat ist installiert und die SSL-Verbindungen funktionieren einwandfrei, aber ich wollte die Dinge so gut wie möglich konfigurieren, um die Sicherheit zu verbessern, wie es in einigen Tutorials beschrieben wird.

Wenn Sie die Konfiguration mit Qualys SSL Labs überprüfen, wird auf der Ergebnisseite Folgendes angezeigt: "Dieser Server akzeptiert die schwache RC4-Verschlüsselung. Note auf B begrenzt."

Ich habe dies jedoch in die ssl.conf gestellt:

 SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!SSLv2:!SSLv3

Ich habe das in der Antwort auf diese Frage angegebene Skript in einer Datei mit dem Namen test-ssl-ciphers.sh gespeichert und die IP-Adresse in eine Loopback-Adresse geändert. Dies ist das Ergebnis von ./test-ssl-ciphers.sh | grep -i "RC4":

Testing ECDHE-RSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ECDHE-ECDSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing AECDH-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ADH-RC4-MD5...NO (sslv3 alert handshake failure)
Testing ECDH-RSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ECDH-ECDSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing RC4-SHA...NO (sslv3 alert handshake failure)
Testing RC4-MD5...NO (sslv3 alert handshake failure)
Testing RC4-MD5...NO (sslv3 alert handshake failure)
Testing PSK-RC4-SHA...NO (no ciphers available)
Testing KRB5-RC4-SHA...NO (no ciphers available)
Testing KRB5-RC4-MD5...NO (no ciphers available)
Testing EXP-ADH-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-KRB5-RC4-SHA...NO (no ciphers available)
Testing EXP-KRB5-RC4-MD5...NO (no ciphers available)

Jede dieser Zeilen enthält "NO", was laut Skript bedeutet, dass der Server die angegebene Verschlüsselungskombination nicht unterstützt.

Außerdem grep -i -r "RC4" /etc/httpdgibt mir der Befehl nur die oben genannte ssl.conf-Datei.

Außerdem werden openssl ciphers -Vauf meiner Chiffresuite überhaupt keine RC4-Chiffren angezeigt, was angesichts der Konfigurationszeichenfolge sinnvoll ist.

Ich bin daher irgendwie verloren, warum die SSL-Check-Websites mir sagen, dass "der Server RC4 akzeptiert". Sie führen sogar die folgenden Chiffren als akzeptiert an:

TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHA

Hat jemand eine mögliche Erklärung? Was mache ich falsch? Vielleicht gibt es einen anderen Ort, an dem die Unterstützung von RC4 oder "Annahme" konfiguriert werden kann?

Vielen Dank.

[ BEARBEITEN ] Unter Verwendung von CentOS 6.6 in einer virtuellen Maschine zu Hause habe ich das Skript erneut mit dem Domänennamen anstelle der Loopback-Adresse auf meinem VPS ausgeführt. Dieses Setup impliziert, dass die Liste der Chiffren von der openssl-Instanz in der VM bereitgestellt wird: Ich habe immer noch kein RC4 unter den Chiffren, die JA ergeben.

AbVog
quelle

Antworten:

16

Bei der Installation des erneuerten Zertifikats habe ich festgestellt, dass das Problem durch die Angabe (für die Domäne und für jede Unterdomäne) des gesamten für HTTPS erforderlichen Datensatzes in ISPConfig verursacht wurde: Zertifikat, privater Schlüssel, Zertifizierungsstellenkette usw.

Anders ausgedrückt führte das Entfernen des Datensatzes zum Qualys-Test, um die Domäne A zu bewerten und gleichzeitig die Warnungen zu RC4 zu entfernen. Das Zurücksetzen der Details führt dazu, dass die Warnungen zurückkommen und die Note wieder auf B begrenzt wird, was keinen Anlass zu Zweifeln hinsichtlich des Kausalzusammenhangs gibt.

Es ist, als ob durch die Angabe der Details für jeden vhost irgendwie eine neue Umgebung erstellt wurde, in der einige Standardeinstellungen die in ssl.conf angegebene Chiffresuite überschrieben haben. Seltsam.

Die Lösung besteht darin, die SSLCipherSuite-Spezifikation in den Apache Directives- Textbereich für jeden vhost aufzunehmen. Das ist, was ich in der Konfiguration habe, die mir eine Note A gibt:

SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder on
# Compression is disabled by default on my distribution (CentOS 6)
# SSLCompression off 
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

EDIT (2017-05-16): Eine zusätzliche Feststellung zu diesem Problem: Die Angabe von SSLCipherSuiteist obligatorisch. Ich kann nicht verstehen, warum diese spezifische Anweisung, obwohl auf Serverebene angegeben, nicht automatisch auf virtuelle Hostkonfigurationen angewendet wird . Ich verwende Apache 2.2.15 unter CentOS 6.9.

EDIT (2018-06-18): Weitere Informationen. Ich habe gerade festgestellt, dass die SSLCipherSuiteDirektive ein einziges Mal angegeben werden kann und für alle virtuellen Hosts gilt: In der Basiskonfigurationsdatei mod_ssl (unter CentOS 6 befindet sich die Datei unter /etc/httpd/conf.d/ssl.conf) müssen Sie die Direktive lediglich außerhalb von angeben der Standard-Virtualhost. In der Dokumentation zu Apache 2.2 wird der Standardwert dieser Direktive angegeben SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP. Ich gehe davon aus, dass hier die RC4-Chiffre herkommt: In Ermangelung jeglicher Spezifikation, was bei mir der Fall war, da sich keine Spezifikation im "globalen" Kontext befand, gilt der Standardwert. Dieses Verständnis beendet das, was für mich ein Rätsel war. Ironischerweise werde ich auf CentOS 7 umsteigen, wenn ich diese Erklärung finde! HTH.

AbVog
quelle
6
SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!SSLv2:!SSLv3
                                                                    ^^^^^^^

Schlechte Idee. Durch das Deaktivieren aller SSLv3-Verschlüsselungen werden die mit TLS1.0 und TLS1.1 verwendbaren Verschlüsselungen deaktiviert, und mit TLS1.2 werden nur einige Verschlüsselungen neu eingeführt (sofern Ihr Server TLS1.2 unterstützt).

Ich bin daher irgendwie verloren, warum die SSL-Check-Websites mir sagen, dass "der Server RC4 akzeptiert". Sie führen sogar die folgenden Chiffren als akzeptiert an:

Stellen Sie sicher, dass sowohl der lokale als auch der externe Test auf denselben Server zugreifen (IP-Adresse). Ich habe viele Websites gesehen, auf denen example.comsich ein anderer Host als befindet, www.example.comund daher unterscheiden sich die Tests.

Steffen Ullrich
quelle
Ja, die Stammdomäne und ihre Unterdomänen befinden sich auf demselben VPS. Dem VPS ist eine IP-Adresse zugeordnet, und ich verwalte sie mit ISPConfig. Vielen Dank.
AbVog
Verwenden Sie SSLLabs . Vergleichen Sie die angezeigte IP mit der IP Ihres Systems. Stellen Sie sicher, dass Sie keinen anderen (Reverse-) Proxy oder CDN vor sich haben, der das Ergebnis beeinflussen könnte.
Steffen Ullrich
"Das Deaktivieren aller SSLv3-Verschlüsselungen führt zum Deaktivieren der mit TLS1.0 und TLS1.1 verwendbaren Verschlüsselungen und lässt nur einige mit TLS1.2 neu eingeführte Verschlüsselungen übrig (wenn Ihr Server TLS1.2 unterstützt)." Also, was ist die richtige Lösung?
Rohn Adams
@RohnAdams: Wenn RC4 deaktiviert werden soll, ist der '! RC4'-Teil in Ordnung. Das Problem war die Überblockierung durch die Verwendung von zusätzlich '! SSLv3'. Informationen zu nützlichen Chiffren finden Sie unter Mozilla Cipher Generator .
Steffen Ullrich
2

Qualys SSL Labs reagiert sehr empfindlich auf Standardhosts usw. Überprüfen Sie, ob ALLE Ihre HTTPS VirtualHosts auf dieser IP-Adresse genau dieselben Einstellungen verwenden (abgesehen von Zertifikatsdateien). Ich hatte ein ähnliches Problem, bei dem einige der Qualys-Tests mit meinem Ziel-VirtualHost und getestet wurden Einige der Tests schienen einen Standard-VirtualHost aufzunehmen. Bei meinem Ziel-VHost war nur eine einzige Verschlüsselung aktiviert, aber Qualys fand eine viel größere Liste von dem Standard-VHost.

Ich habe hier auch ein besser aussehendes Skript gefunden , das ausführlichere Informationen zu SSL-Tests enthält.

Geoff
quelle
2

Habe gerade nach einer meiner Seiten gesucht. Aufgrund der Antwort von @ AbVog stellte ich fest, dass sich meine Anweisungen tatsächlich nur innerhalb des Standard-vhost befanden. Als ich die Direktiven in den globalen Kontext verschoben habe, war alles gut.

Abgesehen davon bin ich auch auf https://cipherli.st/ gestoßen, das eine gute Liste von SSL-Konfigurationen für eine Reihe von verschiedenen Paketen enthält. Die aktuelle Empfehlung für Apache lautet wie folgt:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff

# Requires Apache >= 2.4
SSLCompression off 
SSLSessionTickets Off
SSLUseStapling on 
SSLStaplingCache "shmcb:logs/stapling-cache(150000)" 
Boyvinall
quelle
0

Auf meinem Fedora 25 mit Apache / 2.4.25 werden Chiffren von den Kryptorichtlinien behandelt (siehe / etc / cryptopolicies / backends). In der Standardeinstellung ist RC4 vollständig deaktiviert, sodass keine Manipulationen an den Chiffren im Apache-Setup erforderlich sind. Es sei denn, Sie stellen sicher, dass Sie die neueste ssl.conf verwenden, da diese nicht standardmäßig installiert ist, sondern im Verzeichnis conf.d als ssl.conf.rpmnew belassen wird.

Um SSL zu konfigurieren, musste ich nur die Zertifikate ServerName und DocumentRoot angeben. Für Squirrelmail ist das.

SSLCertificateFile /etc/letsencrypt/live/mail.xxxx.dk/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mail.xxxx.dk/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/mail.xxxx.dk/chain.pem
SSLCACertificateFile /etc/letsencrypt/live/mail.xxxx.dk/fullchain.pem
ServerName mail.xxxx.dk:443
DocumentRoot "/usr/share/squirrelmail"
John Damm Sørensen
quelle