Auf der sicheren Seite: Website oder WordPress-Blog auf https migrieren

Screenshot aus Googles Security Blog
Screenshot aus Googles Security Blog

Die Firma Google hat viele Interessen, eine davon ist die Popularisierung sicherer Verbindungen vom Webbrowser des Users zum Webserver des Anbieters mittels SSL/TLS. Ab 2017 soll Googles hauseigener Chrome-Browser immer dann eine Warnung in der Adresszeile anzeigen, wenn eine Website per ungesicherter Verbindung kommuniziert. Eine solcher Warnhinweis färbt natürlich negativ auf jeden Website-Betreiber – ganz egal ob Blogger oder Business – ab, weshalb man schleunigst Vorkehrungen treffen sollte, die eigene Website per https erreichbar zu machen. Die Aufgabe ist überschaubar, will aber dennoch sorgsam geplant werden: Von der Bestellung eines SSL-Zertifikats über die Konfiguration der Domain bis zur Suchmaschinen-freundlichen Migration der Website ist einiges zu tun. Kosten kann man sich ersparen. Dieser Leitfaden ist nicht nur für WordPress-Blogs gedacht, aber er berücksichtigt eine unschöne Besonderheit des beliebten Blog-Systems.

1. Ein SSL-Zertifikat holen
Wie man sich ein eigenes SSL-Zertifikat erstellt, ist schon hier im Blog beschrieben. Ein solches selbst signiertes Zertifikat passt aber nur für private Websites, weil keine bekannte Institution es digital beglaubigt hat; jeder ordentliche Browser wird einem solchen Zertifikat also misstrauen. Firefox, Chrome und Co. kennen zwar von Haus aus viele Zertifikate, aber deren Emittenten ließen sich die Ausstellung viele Jahre lang teuer bezahlen – für Betreiber kleinerer Websites ein unerschwinglicher Luxus.

Zum Glück hat sich das geändert. Dank der gemeinnützigen, von mehreren Organisationen und Firmen getragenen Zertifizierungsstelle Let’s Encrypt gibt es seit 2015 kostenlose SSL-Zertifikate für alle. Das hat auch die Preise kommerzieller Anbieter ins Rutschen gebracht. So kann man inzwischen bei großen Webhostern wie Strato oder 1&1 (die ohnehin Großabnehmer-Rabatte nutzen können) für rund vier Euro im Monat Hostingpakete buchen, bei denen nicht nur eine Domain, sondern auch das zugehörige SSL-Zertifikat inklusive ist. Wer einen Massenhoster sucht, weil das Budget knapp, die Ansprüche nicht so hoch und die technischen Kenntnisse gering sind, sollte unbedingt prüfen, ob ein Zertifikat inklusive ist. Wenn nicht, ist das ein Grund zum Wechseln. Grundsätzlich sollte ein WordPress-Blog mit ein paar hundert Seitenabrufen pro Tag und ein paar Plugins auch bei einem Massenhoster rund laufen, zumal viele Anbieter inzwischen auch spezielle WordPress-Tarife anbieten.

Wer es etwas individueller haben will und seinen Webserver selbst administriert, generiert sich bei Let’s Encrypt selbst ein Zertifikat oder sucht sich einen Domainhändler wie Schlund Technologies, der zu jeder von ihm verwalteten Domain ohne Aufpreis ein Basis-Zertifikat von GeoTrust bereit stellt. Nicht mehr empfehlenswert ist das kostenlose Zertifikat Start SSL, weil der Anbieter StartCom in Verruf geraten ist.

2. Zertifikat generieren und Domain konfigurieren
Wer Domain, Hosting und Zertifikat aus einer Hand bezieht, hat es leicht. So reicht es etwa bei Strato, im Kundenbereich zum Menüpunkt „Sicherheit“ zu navigieren und sich dort das kostenlose Inklusivzertifikat für eine vorhandene Domain zu generieren.

SSL-Bestellung bei Strato
SSL-Bestellung bei Strato

Das Zertifikat steht nach kurzer Zeit zur Verfügung, und damit ist auch die Domain über https erreichbar. Weiter zu Schritt 3!

Wer das Zertifikat selbst beauftragt, muss mehr tun. Zunächst gilt es, einen privaten Schlüssel zu erzeugen und damit einen Certificate Signing Request (CSR) durchzuführen. Die Schritte stehen in dem bereits erwähnten Posting. Die resultierende Datei, die auf *.csr endet, reicht man dann bei der Zertifizierungsstelle ein, die das Ganze beglaubigt. Bei Schlundtech funktioniert das – vorausgesetzt, die Domain befindet sich im dort verwalteten Portfolio – so:

Zertifikat mit CSR bei SchlundTech bestellen
Zertifikat mit CSR bei SchlundTech bestellen
  • Man loggt sich ein und wählt im Menü „SSL-Zertifikate“ den Menüpunkt „Zertifikat bestellen“.
  • Sodann füllt man das Bestellformular aus – unter „Produkt“ muss für ein kostenfreies Zertifikat „Symantec/GeoTrust Basic SSL“ gewählt werden – und fügt den Inhalt der zuvor generierten *.csr-Datei per copy & paste im Feld „CSR-Schlüssel“ ein.
  • Nach etwas Wartezeit lässt sich in der Zertifikatsverwaltung das neue Zertifikat per Doppelklick auf die Domain aufrufen: Das Website-Zertifikat ist unter dem Reiter „Server-CRT“ zu finden, das Zertifikat des Herausgebers unter dem Reiter „CA CRT“.
  • Beide Zertifikate kann man nun per copy & paste übernehmen und in zwei Dateien speichern, die wiederum mit einer dritten Datei, dem anfangs generierten privaten Schlüssel, auf dem Server gespeichert werden müssen.
  • Schließlich muss der verwendete Webserver – in den meisten Fällen also Apache oder Nginx – so konfiguriert werden, dass die Domain das SSL-Protokoll nutzen kann und zur Beglaubigung die drei Schlüssel- und Zertifikatsdateien herangezogen werden. Mehr zur Webserver-Konfiguration steht hier.

Einen Sonderweg beschreitet Let’s Encrypt. Mit einem cleveren Script namens Certbot kann sich der Admin eine quasi-automatische Zertifizierung samt Webserver-Konfiguration einrichten. Dabei muss Certbot allerdings auf dem Server laufen, und die Website geht kurzzeitig offline. Wer das nicht will oder lieber alles manuell erledigt, kann Certbot auch auf einem anderen Rechner laufen lassen, beglaubigt seine Zuständigkeit für die Domain mit Hilfe einer Challenge-Datei, die der Webserver ausliefern muss, und richtet schließlich mit den generierten Schlüssel-/Zertifikatsdateien wie im vorigen Beispiel seinen Webserver ein.

3. Website migrieren

Ist alles korrekt konfiguriert, ist Ihre Website nun also unter https://meinedomain.com erreichbar. Aus der Perspektive der SEO (Suchmaschinen-Optimierung) kommt nun aber das wichtigste Stück Arbeit, denn die Seite kann ja zusätzlich immer noch unter http://meinedomain.com aufgerufen werden. Der SEO-Fachmann nennt das „Duplicate Content“ – derselbe Inhalt ist unter zwei verschiedenen Adressen erreichbar (oder sogar noch mehr, wenn auch noch die Subdomain-Variante www.meinedomain.com in Gebrauch ist) – und hebt mahnend den Zeigefinger: Google (andere Suchmaschinen auch, aber die zählen in Deutschland kaum) könnte nämlich denken, dass hier kein braver Webmaster, sondern ein böser Spammer am Werk ist.

Um diesen bösen Verdacht zu zerstreuen, sollte man eine Weiterleitung setzen, die alle Anfragen (einschließlich Unterseiten) auf http://meinedomain.com automatisch nach https://meinedomain.com dirigiert. Bei Massenhostern wie Strato geht das per Mausklick; wer selbst administriert, setzt einen HTTP-Redirect mit dem Statuscode 301. Im Apache-Webserver also so etwas wie:

     RewriteCond %{HTTPS} off
     RewriteRule (.*) https://meinedomain.com$1 [R=301,L]

Auf diese Weise wird Google mit der Zeit auch alle vor der Umstellung auf https indexierten Seiten über kurz oder lang auf https umschwenken, was auch ein paar Pluspunkte beim Ranking ergibt. Der Redirect sollte es bringen; weitere Maßnahmen mit ähnlichem Effekt sind die Aktivierung von HSTS (HTTP Strict Transport Security) im Webserver und die zusätzliche Registrierung der https-Adresse in der Google Search Console (ehemals Webmaster Tools) als bevorzugte URL. Mehr dazu in Googles Dokumentation.

4. Nacharbeiten für WordPress

Wer den 301-Redirect gesetzt hat, braucht auch kein Plugin mehr, um eine Umleitung auf WordPress-Ebene durchzuführen. Trotzdem ist die Migration für WordPress noch nicht abgeschlossen. Schuld daran ist WordPress selbst, weil das Blog-System alle internen Links, die ein Blogger in seinen Postings setzen, nicht als relative, sondern als absolute Links zum Text speichert. Zwar kann man im Backend unter „Einstellungen > Allgemein“ die URL der Website modifizieren, also „http://“ in „https://“ umändern, doch das genügt nicht; auf die bereits gesetzten internen Links hat diese Einstellung leider gar keinen Einfluss. Man muss also noch einmal Hand anlegen.

Wie für (fast) alles, gibt es auch dafür Plugins. Wer Zugriff auf die Kommandozeile hat, erledigt diese heikle Angelegenheit aber vielleicht doch lieber selbst. Entweder direkt auf dem Server, auf dem WordPress ausgeführt wird, mit WP-CLI:

wp search-replace 'http://meinedomain.com' 'https://meinedomain.com'

Oder man erledigt diese Aufgabe komplett zu Fuß:

  • Einen Dump der WordPress-Datenbank anlegen – beispielsweise per phpMyAdmin. Oder bei Konsolen-Zugang:
    mysqldump -u username -p datenbankname > wp-datenbank-http.sql
  • Über die Dump-Datei eine Suchen/Ersetzen-Routine laufen lassen, die alle Vorkommen von „https://meinedomain.com“ zu „https://meinedomain.com“ umschreibt und das Ergebnis unter einem anderen Dateinamen abspeichern, so dass die Vorher-Version als Backup erhalten bleibt – man weiß ja nie. Beispiel mit sed in der Linux-Konsole:
    sed 's|http://meinedomain\.com|https://meinedomain.com|g' wp-datenbank-http.sql > wp-datenbank-https.sql
  • Den umgeschriebenen Dump wieder mit phpMyAdmin einlesen. Oder bei Konsolen-Zugang:
    mysql -u username -p datenbankname < wp-datenbank-https.sql

Nun führen auch die internen Links auf https-Seiten.

Hinweis: Da inzwischen viele Blogs schlecht oder gar nicht gekennzeichnetes Product Placement betreiben: Dieses Posting ist nicht gesponsert; die Nennung der im Text genannten Anbieter erfolgt nur beispielhaft und weil teilweise Screenshots aus deren Kundenbereichen verwendet wurden.

Schreibe einen Kommentar