OpenVPN Crypto-Tuning: tls-auth, tls-cipher, tls-version-min, dh, verify-x509-name, cipher, auth, remote-cert-tls

OpenVPN kommt in den Standardsettings was die Verschlüsselung angeht recht konservativ daher. Hier möchte ich Euch zeigen, wie man OpenVPN Post-Snowden tauglich macht. Dazu benötigen wir die neueste Version von OpenVPN, beim Schreiben des Artikels ist das Version 2.3.6. Für die Debian/Ubuntu-Fraktion empfehle ich die von OpenVPN bereitgestellten Software-Repositories, um die neueste OpenVPN-Version zu installieren. Auf das Einrichten des OpenVPN-Servers möchte ich hier nicht eingehen, dazu gibt es z.B.  für Ubuntu eine brauchbare Anleitung.

1. cipher

Meine Empfehlung: AES-256-CBC

Server-Config:

cipher AES-256-CBC

Client-Config:

cipher AES-256-CBC

2. auth

Meine Empfehlung: sha512

Server-Config:

auth SHA512

Client-Config:

auth SHA512

3. dh

Standardmäßig nutzt OpenVPN einen nur 1024bit großen Diffie-Hellmann-Parameter. Wir erstellen einen neuen mit 4096bit (Achtung, das wird sehr lange dauern):

cd /etc/openvpn/easy-rsa2/keys
openssl dhparam -out dh4096.pem 4096

und geben/passen den Pfad in der Server-Config an:

dh ./easy-rsa2/keys/dh4096.pem

4. tls-cipher

Hier bedienen wir uns den Empfehlungen von bettercrypto.org und dem herausgegebenen pdf-Dokument.

Server-Config:

tls-cipher DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA

Client-Config:

tls-cipher DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA

Die TLS-Cipher Namen werden beim Verbinden als „deprecated“ bezeichnet, was aber nicht so tragisch ist, denn OpenVPN versteht die Anweisung trotzdem. Die IANA-Namen haben alle noch ein „TLS-„ vorneweg und würden die Liste verkürzen, da die tls-cipher Anweisung nur 256Byte lang sein darf.

5. tls-version-min

Server-Config:

tls-version-min 1.2

Client-Config (siehe Update):

tls-version-min 1.2

Forciert die Benutzung von TLS v1.2 (und ermöglicht damit auch die stärkeren Cipher-Suiten wie DHE-RSA-AES256-GCM-SHA384). Bei der zum Zeitpunkt der Veröffentlichung dieses Artikels aktuellen OpenVPN Version 2.3.6. muss die tls-version-min Anweisung mit demselben Wert in Server- und Clientkonfiguration drin stehen. Die OpenVPN-Macher haben mit 2.4 aber schon angekündigt, TLS v1.2 standardmäßig zu verwenden, so dass diese Option in Zukunft nicht mehr notwendig sein könnte.

Update: Nach letzten Tests, die ich mit den neuesten OpenVPN-Versionen durchführte, ist die tls-version-min-Anweisung in den Client-Configs nicht mehr nötig.

6. verify-x509-name

Sicherheitsfeature gegen man-in-the-middle-Attacken.

Client-Config:

verify-x509-name <common-name des servers> name

In der Regel nimmt man als Common-Name für das Serverzertifikat den FullQualifiedDomainName, mit dem der OpenVPN-Server von außen erreichbar ist. Die meisten Anleitungen weisen auch auf diesen Umstand hin.

7. remote-cert-tls

Ein weiteres Sicherheitsfeature, was die Schlüsselverwendung überprüft und zusammen mit verify-x509-name ebenfalls gegen man-in-the-middle-Attacken hilft.

Server-Config:

remote-cert-tls client

Client-Config:

remote-cert-tls server

8. tls-auth

Eine gut Methode, um DOS-Attacken abzuschwächen, ist die hier beschriebene TLS-Auth-Methode mit einem TLS-Static-Key (PSK). Dabei werden eingehende TLS-Pakete nur akzeptiert, wenn sie mit dem TLS-Key signiert wurden. Nicht signierte Pakete werden so schon frühzeitig verworfen und können keine so hohe Last erzeugen.

Zuerst erstellen wir einen TLS-Static-Key:

cd /etc/openvpn/easy-rsa2/keys
openvpn --genkey --secret ta.key
chmod 0600 ta.key

und passen dann wieder die Configs an. Server-Config:

tls-auth ./easy-rsa2/keys/ta.key 0

Client-Config:

tls-auth ta.key 1

Beim Verteilen der Zertifikat-Pakete an die Clients sollte man natürlich den ta.key nicht vergessen.

Am Ende den OpenVPN-Server neustarten:

service openvpn restart

4 Gedanken zu „OpenVPN Crypto-Tuning: tls-auth, tls-cipher, tls-version-min, dh, verify-x509-name, cipher, auth, remote-cert-tls“

Schreibe einen Kommentar

Kommentare müssen vor der Veröffentlichung freigegeben werden. Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * gekennzeichnet. Bitte beachte auch die Datenschutzhinweise bzgl. des Kommentierens und des Widerspruchsrechts.