Umstellen einer Website auf HTTPS

Nach unseren beiden vorhergehenden Artikeln zum Thema SSL/TLS und HTTPS, folgt nun der obligatorische dritte Teil zur Umsetzung. Nachdem wir mit Hilfe eines SSL-Zertifikats HTTPS für dieses Blog aktiviert haben, gehen wir kurz auf die notwendigen Schritte ein, um eine Website auf HTTPS umzustellen.

1. TLS beim Hoster aktivieren

Natürlich ist die Voraussetzung für die HTTPS-Verbindung ein SSL-Zertifikat. Wie zuvor beschrieben, kann dieses bei einigen Hostern wie Cyon oder Hostpoint per Mausklick aktiviert werden. Bei anderen Anbietern muss zuerst ein Zertifikat erworben und eingerichtet werden. Erst wenn dies erledigt ist, kann die Website selbst umgestellt werden.

2. Redirect auf HTTPS

Üblicherweise geben Besucher einer Website die URL ohne das Protokoll-Präfix HTTP:// oder HTTPS:// ein. Viele User gelangen auch über einen Link auf eine Website, in welchem eventuell noch das normale HTTP-Protokoll angegeben ist. Es gilt nun all diese Anfragen direkt auf HTTPS umzuleiten. Dies gelingt sehr einfach mit folgendem Code in der .htaccess:

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

Edit 17.12.15 – Es besteht auch die Möglichkeit, nur Anfragen auf eine bestimmte Domain weiterzuleiten. In diesem Fall muss folgender Code genutzt werden:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.tld [NC]
RewriteCond %{HTTPS} =off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]

3. Ändern der baseURL

Wichtig ist, dass auch die <base> einer Website umgestellt wird. Erneut wird statt HTTP:// das Präfix HTTPS:// angegeben. In TYPO3 ist dies meistens eine Einstellung im Template, bei Drupal wird die base üblicherweise in der settings.php angegeben. In WordPress geschieht dies einfach unter Einstellungen -> Allgemein:

Einstellen der base URL in WordPress

Anschliessend sollten auch die Permalinks aktualisiert werden. Hierfür kann einfach unter Einstellungen -> Permalinks erneut auf „Änderungen übernehmen“ geklickt werden.

4. Bereinigen der Datenbank

Eigentlich sollte die <base> und die aktualisierten Permalinks bereits dafür sorgen, dass alle internen Links der Website nun auf HTTPS:// leiten. Dennoch empfiehlt es sich, die Datenbank zu überprüfen. Mit Hilfe von Search and Replace kann hier jeder String HTTP://domain.tld durch HTTPS://domain.tld ersetzt werden. Dabei sollte unbedingt nach der gesamten Domain gesucht werden, um etwaige Links zu externen Assets – beispielsweise für Plugins – nicht zu verändern. Anschliessend kann die DB ersetzt werden (natürlich erst nachdem ein Backup gespeichert wurde).

5. Aktualisieren der Templates

Alle hartkodierten Links in HTML-Templates müssen überprüft werden. Häufig werden hier Bilder, JS- oder CSS-Dateien verlinkt, welche nun über HTTPS:// aufgerufen werden sollten.

Edit 09.12.15 – Über twitter wurden wir noch auf diesen Artikel aufmerksam gemacht. Hier wird eine Methode beschrieben, welche es ermöglicht Assets über eine relative URL zu verlinken. Dabei wird dann das Protokoll der momentanen Umgebung genutzt, je nach dem ob über HTTPS oder HTTP kommuniziert wurde. Im Artikel wird korrekt darauf hingewiesen, dass relative URLs in diesem Fall eine Sicherheitslücke darstellen, da es ermöglicht wird Teile der Website auch unverschlüsselt zu laden.

6. Für WordPress: SSL für Login und Backend erzwingen

WordPress stellt eine Konstante zu Verfügung, welche SSL für den Login und den gesamten Adminbereich erzwingt. Standardmäßig ist der Wert auf false gesetzt. Um die Funktion zu aktivieren muss folgender Code in der wp-config.php hinzugefügt werden:

 define('FORCE_SSL_ADMIN', true);

7. Fehlersuche nach „Mixed Content“

Letztlich führt kein Weg daran vorbei, einzelne Pages selbst zu überprüfen. Je nach Browser wird eine sichere Verbindung in der Adresszeile mit unterschiedlichen Symbolen dargestellt (hier sind die Beispiele für Mozilla Firefox und Google Chrome). Sobald nicht alle Inhalte verschlüsselt geliefert werden, wird dies dargestellt. Bei Chrome erscheint anstatt des Schloss-Symbols wieder das Symbol einer normalen Website. Durch Klicken können weitere Informationen angezeigt werden.

Google Chrome weist auf mixed content hin

Die Console liefert zudem eine Warnung über Mixed Content, also Content der Teilweise über HTTPS und Teils über HTTP geliefert wird. Eine solche Warnung kann beispielsweise so aussehen:

Die Console warnt vor mixed content

So lässt sich leicht herausfinden, welche Quelle noch nicht über HTTPS läuft, in unserem Beispiel ein Bild dessen Link hartkodiert war.

8. Google Webmaster Tools

Auch wenn man in verschiedenen Quellen liest, dass Google über die Änderung informiert werden muss, können wir dies nicht bestätigen. Google Webmaster Tools unterscheiden nur zwischen den Domains – ohne das Protokoll-Präfix. Hier ist also nichts weiter zu tun.

Edit 08.01.16 – Ich bin nun doch auf eine Page bei Google gestossen, auf der empfohlen wird HSTS für die Domain zu aktivieren. Da dieser Abschnitt beim Schreiben immer länger wurde, habe ich mich entschieden gleich einen eigenen Beitrag zu HSTS zu verfassen. Zudem empfiehlt Google alle Versionen in den Webmastertools zu hinterlegen. Dies beinhaltet die Version mit und ohne www. Falls die Site auch über HTTPS erreichbar ist, auch dieses Protokoll mit und ohne www.

Google Webmastertools empfiehlt alle verfügbaren Protokolle mit und ohne www anzugeben.

Fazit

Um eine Website von HTTP auf HTTPS umzustellen, bedarf es einiger Änderungen am System. Am wichtigsten ist das Ändern der baseURL, das Aktualisieren der Permalinks und der Redirect auf HTTPS:// für alle Besucher. Um weiterhin Mixed Content zu vermeiden müssen Template-Dateien und die Datenbank angepasst werden. Bei der finalen Überprüfung ist die Console des Chrome Inspectors hilfreich, da hier unverschlüsselte Quellen direkt angezeigt werden.

Falls Sie Fragen haben, oder bei einer Umstellung anders vorgehen würden, hinterlassen Sie doch einfach einen Kommentar. Wir freuen uns über Anregungen jeder Art! Und darüber, dass unser Blog ab jetzt verschlüsselt und über HTTP/2 ausgeliefert wird.

4 Kommentare zu “Umstellen einer Website auf HTTPS

  1. Vielen Dank für die Info-Seite. Ich hatte dies eigentlich alles bereits so eingestellt – und dennoch zeigt der Firefox an, dass manche Elemente nicht verschlüsselt sind. Und die Netzwerkanalyse zeigt keine unverschlüsselten Objekte an. Hat da irgendjemand eine Idee? Die Seite: https://mein-senf.ch/

  2. Hallo Jakob

    Ohhh hoppla…. peinlich :). Vielen Dank auf jeden Fall!! Mit der Analyse konnte ich die Schrift und das Logo eliminieren (die Klassiker…) – aber das Favicon ist mir einfach nicht aufgefallen :).

    Merci vielmol und Grüäss

  3. Pingback: Noch mehr Sicherheit durch HSTS | k-webs tech blog

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.