WordPress-Adminbereich über SSL absichern

Beim Aufruf eines WordPress-Administrationsbereichs über HTTP wird das Administrationskennwort im Klartext übertragen. Sitzen Sie an einem öffentlichen Ort (z.B. einem Café), dann könnte ein Angreifer relativ einfach Ihr Kennwort abfangen und hätte Zugriff auf den Administrationsbereich Ihrer Seite. Doch nicht nur an öffentlichen Orten sind Sie in diesem Fall ungeschützt. Es existieren diverse andere Angriffsszenarien, die das Abgreifen des Passworts ermöglichen.

Um diesem Problem zu begegnen, sollte man den Adminbereich der WordPress-Installation mit Hilfe eines SSL-Zertifikates und dadurch mit einer HTTPS-Verbindung absichern. Dieser Beitrag erläutert, wie WordPress konfiguriert werden muss, um diese Absicherung zu erreichen.

Zunächst ist es wichtig, auf dem eigenen Webserver oder über den Webhoster ein entsprechendes SSL-Zertifikat zu beantragen und einzurichten, so dass die Website grundsätzlich über HTTPS angesprochen werden kann. Hierbei muss man neben self-signed Zertifikaten und kommerziellen Zertifikaten unterscheiden. Bei den self-signed Zertifikaten wird das Zertifikat vom Benutzer selbst erstellt und ist damit im Regelfall nicht vertrauenswürdig, da die Identität der Website beim Abruf nicht überprüft werden kann. Es erscheint ein entsprechender Warnhinweis, der jedoch weggeklickt werden kann. Eine Verschlüsselung der Datenübertragung findet beim Aufruf der Seite per HTTPS trotz fehlender Identitätsüberprüfung statt.

Die kommerziellen Zertifikate unterscheiden sich dadurch, dass die unterschiedlichen Browser (z.B. Firefox, Chrome und Internet Explorer) die Stammzertifikate der entsprechenden Anbieter kennen. Aus diesem Grund wird den Zertifikaten vertraut und es erscheint kein Warnhinweis.

Ist die Seite per HTTPS erreichbar, wird man beim Aufruf der eigenen Seite jedoch schnell feststellen, dass „etwas nicht passt“. Das liegt daran, dass WordPress Ressourcen (Bilder, CSS-Dateien, etc.) normalerweise per kompletter URL einbindet, d.h. mit vorgestelltem „http://“. Da man nun eine wilde Mischung aus „http://“ und „https://“ hat, machen die Browser im Normalfall dicht und erlauben nur die Nutzung bzw. das Laden der „https://“-Ressourcen.

Das kann zunächst auch ignoriert werden, da das eigentliche Laden der Website nicht abgesichert werden muss, da hier keine vertrauenswürdige Kommunikation stattfinden muss. Stattdessen kümmen wir uns nun um den Administrationsbereich. Dieser kann auf zwei Arten abgesichert werden: Der Login (und damit die Übertragung des Passworts) muss zwingend per HTTPS erfolgen oder der Login und das komplette Arbeiten im Administrationsbereich muss zwingend über HTTPS abgesichert werden. Die entsprechenden Einstellungen für die config.php-Datei sehen wie nachfolgend beschrieben aus. Soll nur der Login zwingend durch HTTPS abgesichert werden, muss folgende Zeile hinzugefügt werden:

define('FORCE_SSL_LOGIN', true);

Um sicherzustellen, dass Login und Arbeiten im Adminbereich durch HTTPS abgesichert sind, muss die nachfolgende Zeile hinzugefügt werden. Die oben genannte Zeile ist in diesem Fall nicht erforderlich.

define('FORCE_SSL_ADMIN', true);

Wichtig ist, dass die Zeilen in jedem Fall über dieser Zeile eingefügt werden:

require_once(ABSPATH . 'wp-settings.php');

Bei der Nutzung von WordPress auf einem Server hinter einem Load Balancer oder Reverse Proxy, gibt es eine Besonderheit zu beachten. Im Normalfall brechen Load Balancer und Reverse Proxies die SSL-Verbindung auf, so dass es dem Webserver erscheint, als würde die Webseite über HTTP und nicht über HTTPS abgerufen werden. Um dem zu begegnen, muss die Konfiguration wie nachfolgend beschrieben durchgeführt werden:

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
    $_SERVER['HTTPS']='on';

Nun sollte Login und/oder Administrationsbereich nur noch über HTTPS aufrufbar sein.

Schreibe einen Kommentar