Blog auf HTTPS umstellen

Blog auf HTTPS umstellen

24. Januar 2017 0 Von Mikesch

Mann Mann Mann…
Immer was Neues, die Zeit ist so schnelllebig geworden. Waren das noch Zeiten, als mit einem einfachen Editor die Homepages in schlichtem HTML  geschrieben wurden 😉
Erst die Scriptsprachen wie PHP, jetzt die Umstellung auf HTTPS.  Was ist eigentlich HTTPS? Und viel wichtiger, soll ich meinen Blog oder Homepage umstellen, muss das wirklich sein?

HTTPS

HTTPS

Was ist eigentlich HTTPS?

HTTPS seht für HyperText Transfer Protocol Secure und ist ein Kommunikationsprotokoll im World Wide Web, um Daten abhörsicher zu übertragen. Es handelt sich um eine Transportverschlüsselung, die eine zusätzliche Schicht zwischen HTTP und TCP darstellt.
Google übt mal wieder mächtig Druck aus. Man mag über Google schimpfen wie man will. Aber mit der Google-Devise “Für den Surfer nützliche Seiten” treiben sie Standards voran. Ich kann mich noch an die vergangenen Jahre erinnern. Ohne Google gäbe es immer noch keine einheitlichen Standards für Browser, keine optimierten Seiten für mobile Geräte. Google hat eine ungeheure Marktmacht, Seiten, die für Google nicht in die nützliche Philosophie passen, werden einfach abgewertet und abgestraft.
Schon seit 2014 hat sich Google der Sicherheit angenommen und gedroht, unsichere Seiten abzuwerten. Bisher hatte ich das für meinen Blog auch wegen der Arbeit missachtet, da bei mir ja keine sensiblen Daten wie Kreditkarten-Nummern übertragen werden. HTTPS ist da im Gegensatz zu Shops eigentlich überflüssig, wie auch bei vielen anderen privaten Seiten auch. Auf das Ranking hatte das bisher auch keinen Einfluss, im Gegenteil, mein Blog erfreut sich eines spitzen Rankings.

Nur, ab 2017 dürfte damit nun endgültig vorbei sein. Google beabsichtigt, im Chrome einen deutlichen Hinweis aufploppen zu lassen der darauf hinweist, dass eine Verbindung unsicher ist. Die anderen Browser werden da garantiert nachziehen. Mich würde es nicht stören, aber wer keine Ahnung von der Materie hat, wird bestimmt abgeschreckt und verlässt die Seite.
Viel wichtiger ist, dass die Homepage oder Blog dann nur noch unter ferner gelistet wird und keine Sau mehr findet. Jeder Blog oder Homepage, die nicht auf der ersten Trefferseite gelistet wird, ist verloren!

Jeder, der ernsthaft einen Blog betreibt und weiterhin gefunden werden will, sollte also bäldigst auf HTTPS umstellen! Keiner hat es bedacht, aber alle hatten ja nur 3 Jahre Zeit 😉

Umstellung WordPress auf HTTP

1. Schritt: Das SSL-Zertifikat

Ein SSL-Zertifikat ist mehr oder weniger ein für eine Domain erstellter Code auf dem Webserver, welcher die Online-Kommunikation in Form einer Verschlüsselung absichert und gleichzeitig ein Garant für die Echtheit der Domain/Servers ist.
War das in der Vergangenheit nicht ganz billig, ist ein Zertifikat mittlerweile recht günstig zu bekommen, bei manchen Hostern wie 1&1 sogar umsonst.
Einmal durch den Provider eingerichtet, bräuchte man theoretisch eine URI einfach nur noch über https://domain.de ansprechen, das wars. Allerdings gibt es einige Fallstricke, die es zu beachten gibt.

Wie unschwer zu erkennen ist, betreibe ich wie wohl auch die Meisten Blogger, das CMS WordPress, von daher werde ich die Umstellung hieran erklären. Wer eine einfache statische Seite hat, kann Schritt 2 recht einfach bewerkstelligen und das wars dann schon fast, bei WordPress oder überhaupt Datenbank unterstützten Seiten gestaltet sich das ein wenig umständlicher.

2. Schritt: Verweise bereinigen

https Schloss

Sichere HTTPS-Seiten sind an das grüne Schloss oben links in der Browserleiste zu erkennen. Voraussetzung ist, dass alle eingebetteten Inhalte wie Bilder oder Videos mit https angesprochen werden!
Wer relative Links einsetzt, hat kein Problem, der braucht gar nichts zu machen und kann die Seiten einfach mit https ansprechen. Beispiel: <img src=”./ordner/bild.jpg”>. WordPress verwendet jedoch absolute Verweise, Beispiel:  <img src=”http://www.domain.de/ordner/bild.jpg”>. Diese http-Verweise müssen zunächst in https umgeschrieben werden!!

search-replace

ScreenShot interconnectit.com

Viele haben im Footer kleine Banner zu RSS- oder Blog-Verzeichnissen. Prüft vorher, ob die Banner über https angesprochen werden können. Wenn nicht, löscht die raus, hier muss man Prioritäten setzen! Denn wenn nicht, bekommt ihr kein grünes Schloss, eurer Blog wird als unsicher gekennzeichnet und es hagelt eine Fehlermeldung!  Das gilt auch für Werbebanner oder andere fremde Inhalte. Prüft später nach, ob die Betreiber ebenso umgestellt haben, dann könnt die ja wieder einsetzen, aber erst mal raus damit!

Ladet das Tool Search-Replace-DB-master herunter, entpackt es und ladet es per FTP ins Stammverzeichnis eures Webservers.
ACHTUNG: Sichert vorher eure Datenbank!!! Entweder im WordPress mit UpDraft oder unmittelbar mit PhpMyAdmin, es kann immer mal etwas daneben gehen 😉
In den Suchen / Ersetzen Feldern gebt Ihr dann unter replace: http://www.domain.de und with: https://www.domain.de ein. Sämtliche Einträge und Verweise in der Datenbank werden dann geändert. Sollte mal was in die Hose gehen, kann man umgekehrt alles wieder rückgängig machen.

Einstellungen

Einstellungen

Das hat auch den Vorteil, dass ihr im BackEnd unter Einstellungen die Umstellung auf https nicht mehr vornehmen braucht, weil das in der Datenbank geschieht.
Achtung: Ihr könnt euch dann nicht mehr einloggen und müsst euch neu anmelden, da die URI durch https nicht mehr stimmt!
Wichtig: Löscht anschließend unbedingt Search-Replace vom Server!!!

Davon ausgehend, dass WordPress nun läuft, enden hier die meisten Beschreibungen im Netz.

Aber leider läuft euer WordPress nun nur theoretisch auf https, WordPress selbst und einige Provider haben wieder Fallen ausgelegt. Das hat mich fast zur Verzweiflung gebracht, selbst in WordPress-Foren und auch auf Webmaster-Blogs erhielt ich keine Hilfe! Fehler: CSS und JavaScripte wurden nicht geladen, kein grünes Schloss, Layout zerhauen und vor allem kein Einloggen in den Admin-Bereich möglich!

Bis ich dahinter gekommen bin und die Lösungen gefunden hatte, im Folgenden bis jetzt im Netz undokumentierte Tipps und Hacks:

Bei mit laufen etliche nützliche PlugIns, u.A. Jetpack mit vielen Diensten, ich vermute, das war u.A. der Übeltäter. Hier werden Scripte und Grafiken von anderen WordPress-Servern geladen.
Angesprochen werden die eingebetteten Grafiken und auch Layoutverweise per JavaScript, die Umstellung in der Datenbank hat hier keinen Einfluss drauf.

https Remover

ScreenShot: WordPress

Hier schafft das das PlugIn HTTP / HTTPS Remover abhilfe. Dieses kleine Teil ist schlicht genial! Es ändert nicht die Datenbank, es erkennt einfach die http-Verweise und schreibt sie bei der Ausgabe in https um, bzw. setzt zwei // vor die Url und lässt das Protokoll einfach weg. 
Dieses kleine PlugIn ist sogar so mächtig, dass man eigentlich auf Search-Replace verzichten könnte. Selbst mein Blog lief nahezu Fehlerfrei mit diesem Tool. Nur wegen einiger individueller Kleinigkeiten habe ich meine Datenbank mit Search-Replace bereinigt. Ihr könnt es also erst mal damit versuchen, vielleicht reicht es ja schon…
Auf jeden Fall ist es für einige Themes und PlugIns notwendig!

Eigentlich jetzt müsste es laufen, doch ich habe Sch… an den Händen, mein 2. Vorname ist Murphy 😉

3. Schritt: Probleme nach Umstellung auf https

Kein Einloggen in dem Adminbereich möglich, URIs wurden nicht korrekt angesprochen, laufzeitfehler…
Lösung: Ladet per FTP die wp-config.php herunter. Öffnet die mit einem Texteditor, tragt folgenden Code oben vor dem WordPress-Code ein, speichert und wieder hoch auf den Server. Spätestens jetzt müsste alles zur Zufriedenheit laufen.
Hier wird zusätzlich nochmal auf die https-Domain verwiesen und angewiesen, dass das Einloggen in den Admin-Bereich und die Inhalte ausschließlich über https zu erfolgen haben.

// ** HTTPS-Einstellungen ** //

define(‘WP_HOME’,’https://www.domain.de’);
define(‘WP_SITEURL’,’https://www.domain.de’);
// ** Optional** //

define(‘FORCE_SSL_ADMIN’, true);
// in some setups HTTP_X_FORWARDED_PROTO might contain
// a comma-separated list e.g. http,https
// so check for https existence
if (strpos($_SERVER[‘HTTP_X_FORWARDED_PROTO’], ‘https’) !== false)
$_SERVER[‘HTTPS’]=’on’;

define( ‘WP_CONTENT_URL’, ‘https://www.domain.de/wp-content’ );

4. Schritt: Redirect von http auf https per .htaccess

Fertig? Nein, die Seite sollte ausschließlich nur noch über https angesprochen werden können. Alleine schon, um duplicate content zu verhindern, was Google gar nicht mag. Google hat noch http-Links in der Treffer-Ausgabe, da sind Links von anderen Seiten, alle die sollten umgeschrieben werden. Dies erfolgt in der .htaccess. Ladet die herunter, öffnet die ebenso mit einem Texteditor und gebt vor den WordPress-Anweisungen folgenden Code ein:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Wenn die Seite nicht per HTTPS angesprochen wird, erfolgt die Umleitung. Man könnte alternativ auch den Port 443 angeben, über den die SSL-Verschlüsselung läuft. Hier gibt es unterschiedliche Lösungswege, müsst ihr bei Bedarf mal googln was für euren Server die beste Lösung ist, nicht alle scheinen überall gut zu funktionieren. Diesen hier halte ich für den Besten.
Auch jetzt könnte wieder alles in Butter sein, nein, der folgende Fehler hat mich 2 Nächte gekostet, bin fast wahnsinnig geworden.

ERR_TOO-MANY_REDIRECTS

HTTPS Fehler

HTTPS Fehler

…oder die Seite wohnmobil-zu-hause funktioniert nicht, sie hat sie zu oft weiter geleitet oder bei Firefox, dass sich die Ausgabe in einer Endlosschleife befindet. Was ist das schon wieder für ein Mist?
Jegliche Umleitung, egal wie, sei es mit .htaccess oder PHP führt zu diesem Fehler. Die Umleitung wird zwar ausgeführt, aber sobald dann die Seite per HTTPS ausgeliefert wird, erscheint die Meldung.  Hier ist es so, wenn auf eine bereits ausgeführte Quelle verwiesen werden soll, erfolgt logischerweise eine Fehlermeldung.

Nun hab ich mir per PHP mal den Port anzeigen lassen. Die Ausgabe der https-Seiten soll angeblich über Port 80 laufen. Das kann eigentlich nicht sein, das müsste Port 443 sein. Logisch, wenn ich dann eine Weiterleitung über die Ports einrichte, muss es zwangsläufig zu dieser Fehlermeldung führen. Irgendwo ist da ein Serverfehler…
Mein Blog ist bei 1&1 gehostet, der an sich sehr kompetente Kundendienst kam hier auch nicht weiter. Laut Aussage des Mitarbeiters ist das Problem auch bekannt, bekommen das augenscheinlich aber nicht in den Griff. Kann sein, dass das etwas mit der besonderen Technik des SSL-Zertifikates bei 1&1 hat.
Whatever, also hab ich mir selber geholfen und die Technik ausgetrickst, jedenfalls funktioniert das Script einwandfrei! 🙂

Mit PHP kann man alle Header-Daten auslesen, die Weiterleitung geht über die Angabe “HTTP”. Mit preg_match wird danach im String gesucht, ist es vorhanden, wird auf HTTPS umgeleitet.
Wichtig: Der Code muss ausgegeben werden, bevor irgend etwas Anderes ausgegeben wird!!  Ladet die wp-config.php herunter, öffnet diese in einem Texteditor und tragt ganz oben unterhalb von <?php folgenden Code ein. Die grünen Kommentare dienen der Erklärung und können gelöscht werden. Nicht wirklich elegant, aber Hauptsache es funktioniert!! 😉

// dauerhafte PHP-Weiterleitung  mit Statuscode 301 //
$headers = apache_request_headers();
// Die Funktion” //
foreach ($headers as $header => $value) {
// Ausgabe des Arrays //
if (preg_match(‘/\”http\”/’, $value))
// Suche nach http, die ” dürfen nicht vergessen werden und//
// müssen  mit \ (Backslash) auskommentiert werden! //

{
header(“HTTP/1.1 301 Moved Permanently”);
// Wichtig, gerade für Google, um duplicate Content zu vermeiden! //
header(“Location:https://www.domain.de”.$_SERVER[‘REQUEST_URI’].””);
// Weiterleitungsziel wohin die Weiterleitung erfolgen soll,  //
//  REQUEST_URI gibt den Rest der URI auf die richtige Seite an //

// zur Sicherheit ein exit-Aufruf, falls Probleme aufgetreten sind //
exit;
}
}

5. Schritt: Google

Google ist immer noch die wichtigste Suchmaschine und jeder, der eine halbwegs erfolgreiche Homepage oder Blog betreiben möchte, hat ein Google-Konto mit den Webmastertools.
Gerade WordPress bietet mit seinen SEO- (Search Engine Optimizing) PlugIns viele Möglichkeiten. Die Erstellung einer Sitemap oder noch wichtiger einer Google-Sitemap ist hiermit ein Klacks.
Wer noch keine Google-Sitemap eingereicht hat, jetzt ist die Gelegenheit dazu, bzw. sollte die Vorhandene jetzt unbedingt aktualisieren!

Junge, war das wieder ein Akt, eigentlich ein Furz, gingen da wieder Stunden und Nächte bei den Kleinigkeiten drauf, den Sandkörnern, die ein Getriebe lahm legen. Hoffentlich hat das zukünftig mal ein Ende…
…viel Spaß beim Basteln 😉