Der Einsatz des HTTPS (Hypertext Transfer Protocol Secure) macht immer dann Sinn, wenn bei der Kommunikation zwischen dem Webserver und dem Besucher einer Webeite sensible Daten ausgetauscht werden. Ich setze diese verschlüsselten Verbindungen grundsätzlich bei administrativen Webtools wie phpMyAdmin oder ISP-Anwendungen (Plesk, Confixx usw.) sowie bei Formularen ein.
Pflicht ist HTTPS für Shop-Betreiber, Banken, Versicherungen und alle anderen Websites, die vertrauliche Daten vom Nutzer abfragen. Kreditkartendaten unverschlüsselt im Bestellprozess eines Online-Shops abzufragen, wäre für mich ein K.O.-Kriterium. Spätestens an dieser Stelle würde ich den Einkauf abbrechen und meine Anschaffungen bei einem anderen Online-Shop tätigen.


Ebenso wichtig ist hierbei, dass es sich um ein Zertifikat mit einer qualifizierten Signatur handelt. Auch wenn das ein paar Euro im Jahr kostet und ein selbst signiertes Zertifikat für die selbe Verschlüsselung sorgen würde. Letztere sind allerdings für die bereits angesprochenen Admin-Tools vollkommen ausreichend.

Redirect von HTTP zu HTTPS

Ich möchte mich in diesem Artikel darauf beschränken, dass ein Aufruf einer bestimmten Website – in diesem Beispiel die Subdomain ssl.redirect301.de – ausschließlich über HTTPS erreichbar sein soll.
Egal ob dies explizit beim Aufruf der URL eingegeben wurde oder nicht. Die Eingabe von http://ssl.redirect301.de in der Browser-Adressleiste wird automatisch per Statuscode 301 auf das verschlüsselte Übertragungsprotokoll HTTPS umgeleitet.

Weiterleitung von HTTP zu HTTPS per htaccess-Datei

Wer die Apache-Konfigurationen bei seinem Webspace-Anbieter bereits über die jeweilige ISP-Anwendung vorgenommen hat, braucht sich eigentlich nur noch um die htaccess-Datei zu kümmern, die für die korrekte Weiterleitung sorgt. Die Datei namens .htaccess muss im Wurzelverzeichnis des per HTTP erreichbaren Webprojekts liegen und benötigt, ggf. neben weiteren Anweisungen, die folgen 3 Zeilen Konfigurationscode.

    RewriteEngine On
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

In der 1. Zeile wird die RewriteEngine aktiviert. In der 2. Zeile wird bei einem Aufruf „nachgesehen“, ob es sich beim Server-Port nicht um Port 443 (HTTPS) handelt. Ist das der Fall, so wird in der 3. Zeile die Anfrage per 301 Redirect an die HTTPS-Seite des angeforderten Hosts weiter geleitet.

Warum der Statuscode 301?

Der Status 301 besagt, dass es sich bei dieser Weiterleitung um einen permanenten Redirect handelt und die angeforderten Dokumente ab sofort nur noch unter der neuen URL abgerufen werden können.
Dies wird dann wichtig, wenn es sich bei der verschlüsselten Seite nicht um ein Tool eines Server-Administrators handelt, sondern um Inhalte, die natürlich auch bei Google in den SERPs auftauchen sollen. Eventuell hat man bereits Backlinks auf die HTTP-Seite, da diese bisher unverschlüsselt betrieben wurde. Kümmert man sich in diesem Fall nur halbherzig um die Weiterleitung der Besucher (ich gehe mal davon aus, dass man hier nicht einfach eine 404-Error-Seite präsentiert), hat man sich möglicherweise nur einen 302 Redirect „eingefangen“. Bei PHP wäre diese temporäre Weiterleitung beispielsweise der Standard.


Da sich mit HTTP und HTTPS ohne weiteres zwei inhaltlich völlig unterschiedliche Webseiten unter einer Domain betreiben lassen, muss natürlich auch Google davon ausgehen, dass dies so ist. Somit kann Google auch die Linkpower der HTTP-Seite nicht einfach auf die SSL verschlüsselte Webseite übernehmen.

Die Server-Konfiguration

Mit einem root-Server hat man natürlich Zugriff auf die Apache-Konfiguration und den ggf. vorhandenen Konfigurationen der virtuellen Hosts. An dieser Stelle favorisiere ich die notwendigen Einstellungen. Aber die bereits beschriebene Einbindung der RewirteRule per htaccess-Datei erfüllt ihren Zweck – ist sicher Geschmackssache. Auf die weiteren Voraussetzungen zur SSL-Verschlüsselung möchte ich in diesem Artikel nicht weiter eingehen, hier für gibt es sehr gute Tutorials bei Tim Bormann.

Virtuelle Host-Konfiguration für Port 80 (HTTP)

#Redirect von HTTP -> HTTPS (Port 80 -> Port 443)
<VirtualHost 109.239.49.203:80>
    ServerName ssl.redirect301.de:80
    RewriteEngine On
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>

Ausschnitt meiner virtuellen Host-Konfiguration für Port 443 (HTTPS)

#SSL-Zertifikat ist für ssl.redirect301.de ausgestellt
<VirtualHost 109.239.49.203:443>
    ServerName ssl.redirect301.de:443
    SSLEngine On
    SSLCertificateFile /pfad/zum/ssl/zertifikat.pem
    ...
    <Directory "/pfad/zur/ssl/webseite">
        ...
    </Directory>
</VirtualHost>

Das sollte es gewesen sein! Falls ihr Fragen oder Anregungen zu diesem Thema habt, dann nutzt bitte die Kommentar-Funktion oder sprecht mich bei Google+ an.