Beiträge

Let’s Encrypt verlässt die Beta Phase

wordpress

Let’s Encrypt – den Namen haben vermutlich schon einige von euch gehört – verlässt Heute die Beta Phase.

Die Beta startete im September 2015 – seither hat Let’s Encrypt mehr als 1,7 Millionen kostenfreie Zertifikate ausgestellt.
Man hat sich zum Ziel gesetzt 100% des Webs zu verschlüsseln – das wird es sicherlich nicht werden, aber die Idee ist gut, und dank der Tatsache, dass keine Kosten für das Zertifikat anfallen, sollte es auch keine Gründe geben, seine Webseite nicht zu verschlüsseln.

Auch in unseren How To’s haben wir schon öfter über Let’s Encrypt berichtet – bisher lässt sich nur Gutes über den Dienst berichtet.

Heute geht es also raus aus der Beta – die Gründungssponsoren Cisco und Akamai haben die weitere Unterstützung – zumindest für die nächsten 3 Jahre – zugesichert, und neue Sponsoren sind dazu gekommen.

Von dieser Seite viel Erfolg!

Starke und sichere SSL Verschlüsselung mit NGINX

idee

Verschlüsselung ist gut – sichere Verschlüsselung ist besser!

In diesem Artikel werden wir unsere Verschlüsselung unter NGINX verstärken und somit sicherer machen. Wir werden so umstellen, dass nur noch Protokolle, Cipher Suites und Verschlüsselungsalgorithmen genutzt werden, welche – Stand Heute – als sicher gelten, also keine Schwachstellen vorhanden sind.

Ziel ist es, Angriffe wie Heartbleed, BEAST, Poodle und Konsorten zu verhindern,  wir werden nur Cipher Suites verwenden, welche Forward Secrecy bieten und SSL v3 und älter unterbinden.

Wir möchten als Ergebnis ein A+ Rating beim SSL Labs Test erhalten.

Bitte beachtet, dass ihr damit möglicherweise einige veraltete Browser von eurer Webseite ausschließt, z.B. Internet Explorer 8 und älter unter Windows XP. Diese Browser unterstützen in der Regel aber sowieso kein SNI (virtuelles SSL Hosting). Im Sinne der Sicherheit sollte das akzeptabel sein.

Ausgangslage

Zum Start nehmen wir eine Webseite auf einem vServer welche mittels EasyEngine eingerichtet wurde.

Die URL dieser Seite werfen wir in den SSL Labs Test und erhalten folgendes Ergebnis:

SSL Repost Ausgangslage

Als Overall Rating erhalten wir ein ‚B‘ – wobei wir schon sehen könne, dass unser Zertifikat 100% erreicht, die Protokoll Unterstützung sowie die Cipher Stärke sehr gut bewertet sind.

Auf Grund des schwachen Diffie-Hellman Schlüssel Austausches, wird die Bewertung aber auf ‚B‘ begrenzt. Dieses wollen wir durch unsere Anpassungen ‚korrigieren‘.

Wir nehmen Änderungen an der Konfiguration eures Servers vor – bitte legt euch ein Backup aller Konfigurationsdateien an – und immer daran denken: Alle Änderungen auf eigene Gefahr!

NGINX Anpassen

Dieses HowTo basiert auf einer Einrichtung mit EasyEngine – lässt sich aber auf alle NGINX Einrichtungen anwenden, die Pfade sind dann allerdings möglicherweise abweichend!

Grundsätzlich bestehen 2 Möglichkeiten die Einstellungen anzupassen:

  1. Global für alle per NGINX bedienten Domains
  2. Für jede Domain einzeln

Wenn ihr das Global einstellen möchtet, dann ändert ihr die Einstellungen in der NGINX Konfigurationsdatei unter /etc/nginx/nginx.conf

Einige der hier im HowTo besprochenen Anpassungen sind bei EasyEngine bereits voreingestellt!

Solltet ihr das per Domain anpassen, dann ändert ihr das in der Konfigurationsdatei der jeweiligen Domain, und zwar im { server } Block,  die Anpassungen werden im SSL Teil vorgenommen!

Ihr findet die Konfigurationsdatei hier: /var/www/domain.de/conf/nginx/ssl.conf – bitte domain.de gegen eure Domain austauschen.
Bei Debian Standard Einrichtung unter /etc/nginx/sites-available/domain.de – bei CentOS unter /etc/nginx/nginx.conf.

Der Inhalt der Konfiguration sieht wie folgt aus:

Diese Konfiguration passen wir nun an:

SSLv2 und SSLv3 abschalten

SSLv2 und SSLv3 sind unsicher, wir werden diese abschalten und nur die Protokolle TLS v1 v1.1 und v1.2 unterstützen, dazu fügen wir folgende Zeile zur Konfiguration hinzu:

TLSv1 kann von einem Angreifer auf SSL v3 heruntergestuft werden – das ist allerdings kein Problem, da wir SSL v3 nicht unterstützen. Man kann auch überlegen TLSv1 aus der Konfiguration zu entfernen.

Bei EasyEngine kann dieser Punkt übersprungen werden, außer ihr möchtet TLSv1 entfernen!

Cipher Suites anpassen

Die Cipher Suites bestimmen, welche Algorithmen zum Aufbau eine SSL Verbindung verwendet werden sollen, mit der folgenden Änderung beschränken wir die Aushandlung zwischen Client und Server auf Cipher Suites welche Forward Secrecy unterstützen.

Mittels ssl_prefer_server_ciphers on stellen wir außerdem sicher, dass beim Verbindungsaufbau die Server Wünsche bzgl. Cipher Suite benutzt werden. Nnormalerweise werden die des Clients genutzt, aber das möchten wir verhindern.

Die Cipher Suites in EasyEngine sind bereits gut konfiguriert, wenn gewünscht, dann kann man diese noch weiter einschränken

Bei nicht EasyEngine Installationen bitte noch diese beiden Parameter einstellen bzw. überprüfen:

Wenn ihr ältere Clients unterstützen möchtet, dann könnt ihr, dem Mozilla SSL Konfigurator folgen und die folgenden Cipher Suites Verwenden (was auch der Default Einstellung bei Easy Engine entspricht!)

Diffie Hellman Schlüssel anpassen

Wir richten nun einen 4096bit langen Diffie Hellman Schlüssel ein, damit passen wir die Schlüssellänge so an, dass ein mindestens gleichlanger Schlüssel wie in den Zertifikaten verwendet wird – und gleichzeitig ersetzen wir den mitgelieferten Schlüssel durch unseren eigenen.

Man kann auch einen 2048bit langen Schlüssel erstellen, dann einfach 4096 durch 2048 ersetzen

Die Generierung dauert ziemlich lange – genug Zeit für einen Kaffee!

Diesen Schlüssel definieren wir dann in der globalen NGINX Konfigurationsdatei!
Hier fügen wir im SSL Settings Teil die folgende Zeile hinzu

HSTS – HTTP Strict Transport Security einstellen

Mittels HSTS teilt der Server dem Browser beim Verbindungsaufbau mit, dass er innerhalb einer angegebenen Zeit (max-age), nur noch verschlüsselt mit dem Server kommunizieren soll.

Daraufhin wird jede unverschlüsselte Verbindung, sowie jede Verbindung mit einem ungültigen Zertifikat abgebrochen. Dadurch lassen sich Man in the Middle Attacken vermeiden.

Der max-age Parameter gibt in Sekunden an, wie lange der Browser noch nur verschlüsselt kommunizieren soll.
Wir konfigurieren ein max-age von 6 Monaten.

Diese Einstellung nehmen wir per Domain vor, also bitte in der /var/www/domain.de/conf/nginx/ssl.conf eintragen!

Solltet ihr planen, die Webseiten wieder per HTTP auszuliefern, dann bitte einige Zeit vor dieser Umstellung das max-age auf 1 Sekunde einstellen, ansonsten kann ein wiederkehrender Besucher erst nach Ablauf der max-age wieder auf die Webseite zugreifen!

Abschluss und erneuter SSL Labs Test

Die Konfiguration ist nun fertig und wir starten NGINX neu. Danach besuchen wir die SSLABS Testseite um den Erfolg unserer Anpassungen zu überprüfen. Das Ergebnis sollte nun so aussehen:

SSL Labs Ende

Ihr solltet jetzt auch bei einem A+ Rating gelandet sein, wenn nicht, dann stimmt an eurer Konfiguration etwas nicht 🙂

Damit sind wir am Ende angelangt – Viel Erfolg bei euren Anpassungen!

WordPress Installation – NGINX – HHVM – HTTP/2 – Pagespeed – SSL mit Easy Engine

idee

Ihr möchtet eine hoch performante WordPress Installation für eure Webseite – mit Nutzung von neuesten Techniken und kostenfreiem SSL Zertifikat?

Ich zeige euch Heute, wie ihr diese Installation, mit Hilfe von Easy Engine , schnell und einfach durchführen könnt. Wir nutzen aktuelle Techniken für diese Webseite, wie NGINX, NGINX Pagespeed ModulHHVM und HTTP/2.

Alles was ihr benötigt ist ein Dedizierter oder vServer, am Besten einer, auf dem bisher noch nichts weiter installiert ist – ein How To zur Einrichtung eines solchen Servers findet ihr HIER.

Ihr benötigt als OS Ubuntu 12.04/14.04 oder Debian 7 oder 8! Wenn ihr HTTP/2 benutzen möchtet, dann könnt ihr kein Debian 7 nutzen!

Easy Engine?

Was handelt sich bei Easy Engine (ee) um ein python basiertes Kommandozeilen Tool um NGINX auf Debian und Ubuntu aufzusetzen und HTML, PHP, MySQL, HHVM, Pagespeed und WordPress zur Verfügung zu stellen. Desweiteren könnt ihr mit ee auch z.B. Postfix installieren – aber das lasse ich hier und jetzt mal weg.

Easy Engine bietet 15 verschiedene Möglichkeiten WordPress zu installieren, Single Site – Multisite mit Unterverzeichnis – Multisite mit Subdomain. Diese jeweils ohne Cache, mit WP Super Cache, W3 Total Cache, Nginx Cache oder Redis Cache.

Super Tool – super einfach, aber eine Warnung:

Wenn ihr euch mit dem Verwalten eines Linux Servers nicht auskennt, dann beauftragt lieber jemanden, der das kann, denn ihr selbst seid für die Sicherheit des Servers verantwortlich.

Easy Engine installieren

Ihr wählt euch mit eurem SSH Client (Putty oder ähnliches) auf euren Server ein und führt zur Installation von Easy Engine den folgenden Befehl aus:

Damit ladet ihr das Installationsskript herunter und startet dieses, in der Folge werden benötigte Pakete vom System Installer heruntergeladen und installiert.
Während der Paketinstallation müsst ihr noch euren Namen und eure e-Mail Adresse angeben – das war alles, Easy Engine ist nun installiert und lauffähig.

NGINX Mainline installieren

Da wir ja auch in den Genuß von HTTP/2 kommen möchten, müssen wir nun die Mainline Version von NGINX installieren, denn erst ab NGINX Version 1.9.5 wird HTTP/2 angeboten

Ihr erhaltet im Verlaufe der Installation einen Usernamen und ein Passwort – diese sind für das Webinterface der Easy Engine gedacht, bitte notieren!

WordPress installieren

Mit dem folgenden Befehl installiert ihr WordPress für domain.de (Kleiner Tip: domain.de durch euren Domainnamen ersetzen 🙂 )
Wir nutzen für die Seite HHVM, Pagespeed und Verschlüsselung

Bitte achtet darauf, dass eure Domain im DNS mit und ohne www auf die IP des Servers verweist, ansonsten erhaltet ihr einen Fehler!

Dieses Kommando übernimmt die komplette Arbeit der Installation von WordPress, dem Setup der Datenbank, der Einrichtung von HHVM und Pagespeed sowie die Beantragung und Einrichtung eines Zertifikates. Auch die Weiterleitungen von http nach https werden automatisch eingerichtet. Ihr müsst hier noch bestätigen, dass es sich bei HHVM und Pagespeed um experimentelle Features handelt und einige Plugins möglicherweise nicht arbeiten.

Im Verlauf der Installation erhaltet ihr den Usernamen und ein Passwort für die WordPress Installation – auch diese bitte notieren!

Bitte beachtet, dass die Installation von WordPress in Englisch erfolgt – ihr müsst dann noch unter den Einstellungen Allgemein auf Deutsch umstellen.

Funktionen nach installieren

Wenn ihr möchtet, dann könnt ihr mit Easy Engine auch Funktionen nachinstallieren.
Der folgende Befehl installiert z.B. W3 Total Cache nach

Pagespeed einrichten

Nach der Installation einer Seite müsst ihr noch die Pagespeed Konfiguration vornehmen, im Default sind keine Filter eingeschaltet!

HHVM von einer Domain entfernen

für den Fall, dass ihr auf Probleme mit HHVM stoßt, dann könnt ihr HHVM mit dem folgenden Befehl von einer Domain entfernen, diese Webseite läuft dann mit Standard PHP

Seiteninfo anzeigen lassen

Mit dem folgenden Kommando könnt ihr euch Informationen über eine Webseite anzeigen lassen, ihr müsst allerdings als root eingeloggt sein um dieses Kommando nutzen zu können

Die Ausgabe enthält Informationen zur Funktionen der Webseite sowie Angaben zur Datenbank

Easy Engine Info

Firewall einrichten

Ihr müsst noch ggf. folgende Ports in eurer Firewall freigeben

  • 22/TCP Inbound & Outbound: SSH
  • 80/TCP Inbound & Outbound: HTTP
  • 443/TCP Inbound & Outbound: HTTPS
  • 22222/TCP Inbound: EasyEngine Administrations Tools
  • 11371/TCP Outbound: GPK Schlüssel Server

Ihr solltet in jedem Fall auch nochmal einen Blick auf die Kommandozeilen Parameter Liste bei Easy Engine werfen – dort erhaltet ihr viele weitere Tips für dieses Tool. Bei Problemen gibt es auch einen Community Support auf der Seite.

Nun viel Spaß mit eurer schnellen, neuen WordPress Seite!