In Teil 1 meiner kleinen Artikelserie habe ich die Grundlagen zur SSL-Verschlüsselung erläutert und erklärt, warum die verschlüsselte Übertragung der Website eine gute Idee ist.
In diesem Artikel soll es nun darum gehen, wie eine vorhandene WordPress-Website korrekt umgestellt wird, damit sie mit SSL funktioniert. Dabei gehe ich auch auf die kleinen Fieslichkeiten ein, die einen abseits des üblichen Weges erwarten können.
Einleitung
Grundvoraussetzung für die Umstellung der WordPress-Website ist, dass auf dem Server das SSL-Zertifikat erfolgreich eingerichtet ist. Die Vorgehensweise dazu ist von Hoster zu Hoster und je nach Art des Zertifikats sehr unterschiedlich. Dies im Detail zu erläutern ist leider nicht möglich.
Wenn das Zertifikat auf dem Server eingerichtet ist, so sollte man die Website über eine URL mit „https“ am Anfang aufrufen können, ohne eine Fehlermeldung zu sehen:
https://www.meine-kleine-website.de
Da WordPress noch nicht darauf vorbereitet ist, klappt das wohl eher nicht so gut mit der Anzeige der Website, wichtig ist nun aber erstmal, dass es keine Fehlermeldung bezüglich der Gültigkeit des Zertifikats gibt.
WordPress-Basis-URLs umstellen
Damit WordPress überhaupt weiß, dass es nun über HTTPS aufgerufen wird, müssen in der Konfiguration zwei Einstellungen angepasst werden. Diese finden sich im Admin-Backend unter dem Menüpunkt „Einstellungen > Allgemein“.
Angepasst werden müssen nun die beiden Einstellungen
- WordPress-Adresse (URL) und
- Website-Adresse (URL)
Die Anpassung ist denkbar einfach. Bislang wird dort jeweils eine URL mit „http“ am Anfang stehen. Es reicht dort die URL anzupassen und das „http“ durch „https“ zu ersetzen und die Einstellungen zu speichern.
Da man selbst im Admin-Backend noch eingeloggt ist über die Website-URL mit „http“ am Anfang, wird man nach dem Speichern ausgeloggt und darf sich neu anmelden. 😉
Interne Verweise und Medien-URLs anpassen
So einfach die obige Änderung im Backend ist, leider ist die SSL-Umstellung damit noch unvollständig. Eingefügte Bilder oder andere Medien sowie interne Verweise (Links) werden fest mit ihrer URL in der Datenbank gespeichert, weswegen diese nun immer noch mit „http“ beginnen. Damit die Seite vollständig und korrekt verschlüsselt geladen werden kann, müssen diese Verweise nun in der Datenbank noch angepasst werden.
Dies geht am einfachsten mit einem Plugin. Ich nutze dafür gerne das Plugin „Better Search & Replace“.
Nach der Installation des Plugins findet man den entsprechenden Dialog im Admin-Menü unter dem Hauptpunkt „Werkzeuge“.
Da wir nun in manuell in die Datenbank eingreifen, solltet spätestens vor diesem Schritt ein Backup der Seite gemacht werden, damit wir auf der sicheren Seite sind, falls doch etwas schief geht.
Im ersten Ersetzungsschritt ersetzt man den Aufruf von „http://www.meine-kleine-website.de“ mit „https://www.meine-kleine-website.de„. Wichtig ist dabei, dass am Ende kein abschließender Slash „/“ ist, um möglichst alle Vorkommen zu erwischen.
Bei „Tabellen auswählen“ wählt man alle Tabellen aus, die zur aktuellen WP-Instanz gehören (im Regelfall sollten das alle Tabellen sein, die hier aufgelistet werden).
Den Haken bei „Testlauf?“ kann man erstmal belassen. Der Testlauf zeigt dann, wie viele Vorkommen des oben genannten Suchstrings in der Datenbank gefunden worden sind. Wird kein Vorkommen gefunden, ist vermutlich etwas schief gelaufen beziehungsweise der eingegebene Suchstring falsch.
Passt alles, kann man den Haken beim Testlauf entfernen und die Änderung wirklich auf der Datenbank ausführen. Das kann je nach Größe der Datenbank ein paar Augenblicke dauern.
Ist diese Änderung erfolgt, empfehle ich zusätzlich noch einen weiteren Durchlauf. In diesem Durchlauf ersetzt man die URL nochmals, diesmal jedoch in maskierter Form.
Der Suchstring sollte „http:\/\/www.meine-kleine-website.de“ sein und durch „https:\/\/www.meine-kleine-website.de“ ersetzt werden. Immer mal wieder speichern Themes URLs in dieser Form in den Theme-Optionen, so dass eine Ersetzung auch dieser URLs Sinn macht.
Prüfen des Resultats
Nachdem nun die WordPress-URL umgestellt und alle Vorkommen der alten URL in der Datenbank ersetzt sind, sollte die Seite nun korrekt mit SSL funktionieren. Allerdings gibt es noch einige kleine Hürden. Deswegen sollte nun die Testphase beginnen.
Dazu sehr gut geeignet ist die „Developer Console“ des Browsers, zum Beispiel von Firefox. Man erreicht diese durch die Tastenkombination Strg+Shift+i. Hier sind zuerst alle Fehler auf der Konsole zu prüfen. Unter Umständen konnten externe Inhalte wegen SSL-Fehlern nicht geladen werden. Für einen Detailblick lohnt sich der Reiter „Netzwerkanalyse“, der jede einzelne geladene Ressource zeigt. Ist die Ressource (Bild, CSS_ oder JavaScript-Datei, …) nicht korrekt über SSL geladen, wird kein grünes Schloss angezeigt. Hier ist also noch Nacharbeit erforderlich.
Häufige Probleme sind:
- Grafiken, die von anderen Seiten geladen werden („Hotlinking“)
Abhilfe schafft es, die Grafiken auch per HTTPS aufzurufen. Unterstützt der Server, von dem die Daten abgerufen werden, kein SSL, kann man die Grafiken manuell abspeichern, in das eigene WordPress hochladen und vom eigenen Server einbinden. - Piwik-Integrationen
Piwik ist ein Tool zur Erzeugung von Besucherstatistiken, ähnlich zu Google Analytics. Wird die Seite mit HTTPS betrieben, muss auch die Piwik-Installation per HTTPS eingebunden werden. - Youtube-Videos (oder andere Streaming-Anbieter)
Wenn Youtube-Videos bislang über HTTP eingebunden wurden, dann können diese nun auch nicht mehr korrekt geladen werden, da auch hier eine Einbindung per HTTPS notwendig ist. Je nach Anzahl der Videos kann man diese einzeln abändern oder auch per „Better Search & Replace“ die Youtube-URLs ersetzen.
Zu guter Letzt gibt es auch immer noch Themes und Plugins, bei denen der Autor davon ausgegangen ist, dass niemand HTTPS benutzt. In diesen Fällen werden im Theme oder Plugin Dateien per HTTP eingebunden, ohne das man als Nutzer dies beeinflussen könnte. Natürlich könnte man nun in den PHP-Code gehen und dies anpassen, das ist aber für die allermeisten Benutzer keine Option (und auch sonst keine gute Idee).
In solchen Fällen, in denen also alle Bemühungen scheitern, die eingebundenen Elemente der eigenen Website per SSL zu laden, rate ich zur Nutzung des Plugins „SSL Insecure Content Fixer“.
Dieses Plugin hängt sich in die Ausgabe von WordPress und ändert alle notwendigen HTTP-URLs in HTTPS.
Aber Vorsicht! Dieses Plugin sollte nur das allerletzte Mittel sein, denn dieser Einsatz wirkt sich negativ auf die Performance aus. Deswegen kann man im Plugin selbst auch einstellen, wo überall es sich reinhängen soll (beziehungsweise wie tief). Die nächste Stufe des Plugins sollte man nur zünden, wenn es wirklich notwendig ist. Standardmäßig ist auch die Stufe „Einfach“ aktiviert.
Zum Abschluss sollte man nochmals von Extern alle Seiten der eigenen Website prüfen lassen. Ich nutze dazu gerne den SSL-Check von JitBit.
Umleitung aller HTTP-Aufrufe
Fassen wir nochmal zusammen: das SSL-Zertifikat ist eingerichtet, WordPress wird über HTTPS aufgerufen, die internen URLs sind alle korrigiert, eventuelle externe Inhalte sind korrigiert und sollte es noch Probleme mit internen URLs geben, sind diese mittels Plugin behoben.
Eigentlich könnte diese Anleitung nun zu Ende sein, es gibt aber noch eine Kleinigkeit.
Ziel soll es noch sein, dass alle Seiten, die vorher (ausschließlich) per HTTP aufgerufen wurden, nun ausschließlich per HTTPS aufgerufen werden können. Bislang ist ein paralleler Aufruf mit beiden Protokollen noch möglich. Das ist auch für die Suchmaschinen nicht ganz so dolle, da damit „Duplicate Content“ erzeugt wird.
Also sollen alle Aufrufe, die per HTTP erfolgen, automatisch umgeleitet werden auf HTTPS. Je nach Hoster und Einstellungen bei der Zertifikats-Einrichtung erfolgt diese Umleitung nun schon automatisch. Bevor der nächste Schritt also durchgeführt wird (und ggf. zu Problemen führt), sollte der Aufruf der Website (Startseite und einer Unterseite) nochmal per HTTP geprüft werden. Landet man automatisch auf der richtigen Seite, aber über HTTPS, ist alles gut. Ansonsten benötigt die Seite noch einen kleinen Tweak in der htaccess-Datei.
Die htaccess-Datei ist Teil der Webserver-Konfiguration. Wir wollen dem Webserver nun mitteilen, dass alle Aufrufe der Website mit HTTP weitergeleitet werden sollen auf die passende Seite mit HTTPS. Dazu muss folgendes Snippet in die htaccess eingetragen werden:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfModule>
Das war’s nun aber wirklich. Die Seite sollte nun erfolgreich auf SSL-Verschlüsselung umgestellt sein und wirklich jeder Fallstrick bedacht sein.
Achso: wer die Google Search Console (Webmaster Tools) einsetzt, muss hier die Seite nun nochmal neu anlegen (mit HTTPS). 😉
Wem das nun zu kompliziert war, dem helfe ich auch gerne…
Wenn Du gar nicht mehr in WordPress reinkommst (nach einer Domainumbenennung) und kein Plugin nutzen kannst, hilft dieses kleine PHP Skript: Database Search and Replace Script in PHP
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
Danke für den Hinweis, Tobias.
Wer Zugriff auf die Konsole bei seinem Hoster hat, kann auch das Kommandozeilentool wp-cli nutzen: http://wp-cli.org/
Mit diesem Tool können viele Verwaltungsaufgaben erledigt werden, zB auch das Ersetzen von Werten in der Datenbank.
Hallo Marc,
danke für den super informativen Artikel. Ich plane in den nächsten Wochen meine Websites umzustellen und habe mit deinen Infos jetzt ein viel besseres Gefühl 🙂
Hast du noch eine Empfehlung für das Zertifikat? Ich bin jetzt am Überlegen, dass ich Let’s Encrypt einsetze. Siehst du einen Nachteil, wenn es dann eben nur eine Domainvalidierung ist?
Danke und viele Grüße
Bettina
Hallo Bettina,
freut mich, dass dir der Artikel gefällt.
Wenn du die Möglichkeit hast, bei deinem Hoster ein Let’s Encrypt-Zertifikat zu bekommen, dann würde ich das auch nehmen. Denn ehrlich gesagt: selbst wenn ich ein Zertifikat kaufen würde, für 99% der Fälle wäre es ebenso „nur“ ein Zertifikat mit Domainvalidierung. Alles andere macht eigentlich keinen Sinn, außer du bist eine Bank. 😉
Grüße,
Marc
Perfekt, danke Marc 🙂
Ich bin mit fast allen Domains bei All Inkl und da wird es zum Glück angeboten.
Dann fange ich mal an umzustellen und werde dazu deinen Artikel nutzen.
Viele Grüße, Bettina
Hallo Marc,
deine Anleitung war sehr hilfreich und einfach in der Handhabe, vielen Dank.
Nur bei der Umstellung der Verzeichnisse von WordPress auf https hatte ich so meine Probleme, nach dem Logout kam ich nicht mehr rein, zum Glück hat mein Hoster sofort Support geleistet.
Jetzt freue ich mich auch über den grünen Balken ????
BG
Janus