Wie kann ich TLSv1.2-Unterstützung in Apache unter RHEL6 / CentOS / SL6 erhalten?

7

Ich möchte TLSv1.2-Unterstützung in Apache auf meinem Scientific Linux 6-Server (RHEL6-Neuerstellung) haben.

Gibt es einen halb unterstützten Weg, um dies zum Laufen zu bringen? Am besten mit minimalem benutzerdefinierten Umbau. Im Moment verwende ich mod_ssl mit open_ssl, wie in den SL6-Repositorys bereitgestellt.

Bearbeiten: Sobald TLSv1.2-Unterstützung verfügbar ist, ist die Apache-Konfiguration gut dokumentiert und nicht zu schwierig. Das Problem ist, dass RHEL6 mit OpenSSL 1.0.0 ausgeliefert wird, das nur TLS bis 1.0 oder 1.1 unterstützt.

Michael Ekstrand
quelle
mod_gnutlssollte TLS 1.2 bereitstellen. Möglicherweise müssen Sie eine aktuelle Version von gnuTLS selbst erstellen.
Goldlöckchen
1
Für diejenigen, die über Google kommen, ist es erwähnenswert, dass SL 6 (seit Juni 2014) TLS v1.2-Unterstützung bietet. Stellen Sie sicher, dass die Pakete httpd, mod_ssl und openssl auf dem neuesten Stand sind und Sie können loslegen.
miken32

Antworten:

10

Ich habe eine Kurzanleitung zum Backportieren von OpenSSL 1.0.1 RPM von Fedora Core zur Unterstützung von RHEL6 und Varianten geschrieben, indem ich die mitgelieferte Version 1.0.0 ersetzt habe, um TLSv1.2- und ECC-Unterstützung hinzuzufügen. Gebaut und getestet gegen CentOS 6.4 im September 2013:

Anleitung zu OpenSSL 1.0.1 RPM für CentOS 6

Bitte beachten Sie: Hier halte ich meine eigene Kopie von OpenSSL und OpenSSH auf dem neuesten Stand. Verbesserungen in CentOS 6.5 haben die Nachfrage nach TLS1.2 weitgehend gemindert, und Fehler wie Heartbleed werden dort behoben, während diese Antwort 2013 für immer stecken bleibt. Befolgen Sie die folgenden Schritte nicht wörtlich, es ist unbedingt erforderlich, dass Sie 1.0.1g oder neuer ausführen .

Jetzt mit github: github / ptudor / centos6-openssl

Ich habe einen Patch zur Verfügung gestellt, auf den ich in diesem Handbuch verweisen werde: openssl-spec-patricktudor-latest.diff

Bereiten Sie zunächst Ihre Build-Umgebung vor. (Wenn Sie EPEL installiert haben, verwenden Sie mock. Halten Sie es hier einfach ...)

yum -y groupinstall "Development tools" 
yum -y install rpm-build zlib-devel krb5-devel
mkdir -p $HOME/redhat/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
echo "%_topdir $HOME/redhat/" > ~/.rpmmacros

Holen Sie sich als Nächstes das Fedora Core 20 SRPM für OpenSSL und die vollständige OpenSSL-Quelle.

rpm -Uvh http://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/source/SRPMS/o/openssl-1.0.1e-42.fc21.src.rpm
cd ~/redhat/SOURCES/
wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz
wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz.sha1
openssl dgst -sha1 openssl-1.0.1g.tar.gz ; cat openssl-1.0.1g.tar.gz.sha1

Wenden Sie nun die alte Secure_Getenv-Syntax an und wenden Sie den Patch an:

cd ~/redhat/SOURCES/
sed -i -e "s/secure_getenv/__secure_getenv/g" openssl-1.0.1e-env-zlib.patch
cd ~/redhat/SPECS/
wget http://www.ptudor.net/linux/openssl/resources/openssl-spec-patricktudor-fc20-19.diff
patch -p1 < openssl-spec-patricktudor-latest.diff

Führen Sie den Build aus:

time rpmbuild -ba openssl.spec

Hoffentlich lief alles gut, also installieren wir die neuen RPMs:

cd ~/redhat/RPMS/x86_64/
sudo rpm -Fvh openssl-1.0.1g-*.rpm openssl-libs-1.0.1g-*.rpm openssl-devel-1.0.1g-*.rpm

Stellen Sie sicher, dass es tatsächlich funktioniert hat:

openssl ciphers -v 'TLSv1.2' | head -4

Der Link oben auf meiner Website enthält weitere Details, dies sollte jedoch ein guter Ausgangspunkt sein.

Danke, viel Spaß.

20130819: Die Rohhaut-Revision wurde von 14 auf 15 erhöht.

20130831: Die fc20-Revision wurde von 15 auf 18 erhöht.

20130906: Die fc20-Revision wurde von 18 auf 19 erhöht.

20140408: Gehen Sie einfach auf meine Website für etwas nach 1.0.1g.

Patrick Tudor
quelle
Vielen Dank. Ich hatte halb gehofft, dass es ein (halboffizielles) Repository mit einem Backport geben würde, auf das mich jemand hinweisen würde, aber es scheint, dass es so etwas nicht gibt. In diesem Fall scheint dieser Ansatz eine ziemlich praktikable zweite Wahl zu sein.
Michael Ekstrand
Zur Erinnerung an andere, Sie müssen die meisten Programme, die gegen openssl erstellt wurden, neu erstellen, nachdem Sie openssl wie folgt ersetzt / aktualisiert haben. Zum Beispiel ist nginx statisch mit einigen Bibliotheken verknüpft und funktioniert erst dann wie erwartet, wenn Sie es neu erstellen.
ck_
0

Ich habe diesen Link auf ServerFault gefunden, der das Setup von TLSv1.2 abdeckt. Die Fragen und Antworten tragen den Titel: SSL / TLS 1.2 unter Apache mit openssl 1.0.1 .

Diese Links enthalten Informationen zu TLSv1.2:

httpd.confWenn Sie Folgendes in Ihr Programm aufnehmen, sollte TLSv1.2 aktiviert sein, vorausgesetzt, Sie haben httpd v2.2 oder höher und openssl 1.0.1c oder höher.

SSLProtocol all -SSLv2

Sie müssen Ihre CipherSuites noch einrichten. Hier kann es verwirrend werden. Gemäß den obigen Dokumenten ist die einzige obligatorische Verschlüsselungssuite für TLS 1.2 TLS_RSA_WITH_AES_128_CBC_SHA:

Appendix C. Cipher Suite Definitions
Cipher Suite                            Key        Cipher         Mac
                                        Exchange
TLS_RSA_WITH_AES_128_CBC_SHA            RSA          AES_128_CBC  SHA

Dies besagt, dass der Server ein RSA-Zertifikat für den Schlüsselaustausch bereitstellen muss und dass die Verschlüsselung AES_128_CBC und der Mac SHA sein sollte.

In den httpd mod_ssl-Dokumenten bedeutet dies:

SSLCipherSuite aRSA:kRSA:AES128-CBC:SHA  

Informationen zu SSLCipherSuites finden Sie hier unter httpd .

In der Vergangenheit habe ich meinen Blog-Beitrag mit dem Titel: Sperren von SSLv2 in Apache verwendet , um dies für TLSv1.1 zu tun. Alles auf dieser Seite sollte immer noch relevant sein. Sie müssen lediglich die CipherSuites + die Versionen ändern openssl.

slm
quelle
Mit OpenSSL 1.0.1 oder höher ist das ganz einfach. Das Problem ist, dass RHEL6 / CentOS / SL6 nicht mit einer ausreichend aktuellen OpenSSL ausgeliefert wird.
Michael Ekstrand
@MichaelEkstrand - warum das Downvote?
slm
@sim Weil deine Antwort zwar gut ist, aber eine andere Frage beantwortet. Das Problem ist nicht die Apache-Konfiguration. es funktioniert auf RHEL6, das OpenSSL 1.0.0 liefert.
Michael Ekstrand
0

Ich habe kürzlich das gleiche Problem für einen Freund im Zusammenhang mit POODLE untersucht.

Wenn Sie den neuesten (AORN) httpd24-Build von Oktober 2013 auf epel verwenden, erhalten Sie standardmäßig TLSv1.0 und TLSv1.1. Sobald Sie jedoch SSLProtocol in Apache auf etwas anderes Sinnvolles setzen, verlieren Sie diese Protokolle, da die openssl-Header, gegen die httpd24 anscheinend erstellt wurde.

In der Praxis bedeutet dies, dass Sie TLSv11 und TLSv12 implizit deaktivieren, wenn Sie versuchen, SSlv2 oder SSlv3 explizit zu deaktivieren.

Dies ist eine unglückliche Eigenart von mod_ssl, wenn Sie auf genau ein Protokoll zurückgreifen, das es kennt.

Das httpd24 in den RedHat "Software-Sammlungen" wurde in jüngerer Zeit erstellt und leidet nicht unter diesem Problem. Es wird vermutlich gegen ein späteres openssl erstellt (oder verfügt über einen trivialen benutzerdefinierten Patch).

Covener
quelle
Beachten Sie, dass ich jetzt, da ich mein Epel httpd24 weggeblasen habe, dieses vom Quellcode implizierte Bit nicht bestätigen kann: In der Version 2.4.6, die sowohl in Software-Sammlungen als auch in Epel enthalten ist, sollten Sie in der Lage sein, "SSLProtocolDisable -SSLv3" und "SSLv2" wegzulassen da SSLv2 auf separate Weise entfernt wird, erhalten Sie tlsv11 und tlsv12 zurück. Dies täuscht mod_ssl vor, dass Sie mehrere Protokolle unterstützen.
Covener