@Hausmeista hat ja schon unser Forum,
Computerguard.de, angesprochen. Als Computer-Security-Forum war (und ist) HTTPS natürlich Pflicht bei uns.
Allerdings wollten wir auch kein SSL-Zertifikat kaufen.
Ich erkläre hier mal wie wir
mit einem kostenlosen Zertifikat auf HTTPS umgestellt haben. Zuvor jedoch kurz, warum man überhaupt auf HTTPS umziehen sollte.
Warum HTTPS?
Darum. Dies ist ein englischer Artikel, aber dennoch fasst er die Argumente für HTTPS sehr gut zusammen. Wer es noch kürzer mag, hier eine Aufzählung der Hauptgründe meinerseits:
- Es schützt die Privatsphäre der Nutzer und erschwert Massenüberwachung.
- Es schützt davor, dass die Passwörter von Forum-Nutzern, auch den der Forum-Admins (für's ACP), gestohlen werden.
- Google bezieht in das Suchmaschinenranking mit ein, ob eine Webseite HTTPS benutzt.
Warum nicht nur auf der Login-Seite?
Einerseits hat dies in diesem Fall natürlich keinen SEO-Effeckt, andererseits ist es auch sicherheitstechnisch eine schlechte Idee. Zum einen ist bei XenForo ja praktisch jede Seite eine Login-Seite, da immer am oberen Rand das Login-Panel ist, zum anderen kann - selbst wenn das Passwort nicht abgefangen wird - auch (auf nicht-HTTPS-Seiten) der Session-Cookie abgefangen werden, mit dem man sich dann gegenüber dem Server als den Nutzer ausgeben kann, von dem der Cookie abgefangen wurde.
[IMHO] Warum kein kostenpflichtiges Zertifkat?
Ich bin der Ansicht, dass einfache Verschlüsselung bzw. Sicherheit nichts kosten sollte. Der Aufwand für die CAs ist ebenfalls immer der gleiche - sie müssen nur eine kleine E-Mail senden oder ein Dokument von der Webseite aufrufen.
Es gibt auch keinen Grund ein kostenpflichtiges Zertifikat (abgesehen von EV oder anderen speziellen Zertifikaten) einem kostenlosen vorzuziehen.
1. Voraussetzungen prüfen bzw. schaffen
Zunächst ist es wichtig zu prüfen ob man bei dem Hoster eigene SSL-Zertifikate hochladen und SSL verwenden kann. Dafür ist in manchen Fällen ein Hoster-Upgrade notwendig, welches natürlich Geld kosten kann - dies muss allerdings dann auf jeden Fall beim Umzug zu HTTPS gemacht werden.
Falls man Root-Zugriff auf den Server hat, geht dies natürlich sehr viel leichter, da man da ja alles nötige machen kann. Eine einfache Möglichkeit dies auf einen Root-Server umzusetzen werde ich weiter unten erwähnen.
2. Zertifikat offline erstellen
Obwohl auch einige CAs dies anbieten, erstellt man das eigene Zertifikat am Besten offline. Dies kann man auf allen Linux-Systemen mit OpenSSL machen.
Um beispielsweise ein Zertifikat für eine DE-Domain zu erstellen führt man folgendes aus:
Code:
openssl req -nodes -newkey rsa:4096 -sha256 -keyout 'myprivatekey.key' -out 'mypublickey.csr' -subj '/CN=XXXX.de/C=DE'
(XXXX muss natürlich mit der verwendeten Domain ersetzt werden)
Dies erstellt ein 4096bit Schlüsselpaar. .key ist dabei der private Schlüssel, welcher geheim gehalten werden sollte; .csr ist das sogenannte
Certificate Signing Request, welches den Public Key enthält. Diese Datei müssen wir später an die CA übermitteln.
3. Kostenlos SSL-Zertifkat signieren lassen
Gratis SSL-Zertifikate gibt es (leider) aktuell von wenigen CAs. Allerdings waren uns im Admin-Team vor allem zwei bekannt:
StartSSL (von Startcom) und
WoSign.
Beide bieten normale SSL-Zertifikate (also keine Wildcard oder EV-Zertifikate) gratis an. WoSign bietet als chinesische CA sogar eine Laufzeit von bis zu 3 Jahren eines solchen Zertifikates an.
Dennoch haben wir uns schließlich für StartSSL entschieden. Eine bebilderte Anleitung aller folgenden Schritte findet ihr auch
hier.
Um
das Zertifikat zu erhalten, muss man zunächst
einen Account erstellen (Sign-Up rechts). Danach bestätigt man seine E-Mail-Adresse und erhält von StartSSL ein Client-Zertifikat. Dies
muss man in den Browser importieren, denn dies wird - statt einem Passwort - zum späteren Einloggen benötigt.
Nun verifiziert man entweder mit einer E-Mail den Domainnamen. Man muss also beispielsweise eine E-Mail an
webmaster@mydomain_example.com empfangen und einen gesendeten Code eingeben, um zu Verifizieren, dass man Zugriff auf die Domain hat.
Nun kann man dort den CSR hineinkopieren und man erhält ein Zertifikat der CA. Bei StartSSL sollte man unbedingt auch noch das mit verlinkte
Intermediate-Zeretifikat downloaden, denn ohne dieses akzeptieren die Browser das eigene Zertifikat nicht.
4. Webserver konfigurieren
Bei Shared Hostern konfiguriert man den Webserver meistens über ein Webinterface. Dort findet man dann entsprechende Stellen um den eigenen privaten Schlüssel, den eigenen öffentlichen Schlüssel, das von der CA signierte Zertifikat und alle Intermediate-Zertifikate (auch Brückenzertifikate o.ä. genannt).
Bei Root-Zugriff ist dies etwas schwerer, da man da noch eigene SSL-Einstellungen festlegen muss. Am Besten nutzt man dafür Mozillas
SSL-Config-Generator und liest sich weitere Lektüre zu diesem Thema durch - denn dies ist schließlich ziemlich wichtig.
Alternative: Einfache, kostenlose Einrichtung auf Root-Servern
Mit
Let's Encrypt soll dies dann in Zukunft sehr viel leichter gehen. In dem Projekt, welches von Mozilla in Zusammenarbeit mit einigen Partnern umgesetzt wird, muss man nur eine Software auf dem Webserver installieren und
mit nur einem Befehl wird dies alles automatisch vollzogen - vollkommen gratis wohlgemerkt.
Ab dem 14. September soll dies dann für jeden Webadmin möglich sein.
5. HTTPS-Umleitung
Damit die Nutzer auch zur HTTPS-Version umgeleitet werden, trägt man nun noch zwei Zeilen in die .htaccess ein:
Code:
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://www.XXXX.de/$1 [L,R=301]
Außerdem sollte man noch den sogenannten HSTS-Header (
HTTP Strict Transport Security) senden, der den Browser bei weiteren Besuchen anweist, nur noch die HTTPS-Version der Seite zu nutzen und nicht die unsichere HTTP-Version zu nutzen.
Mehr Information dazu findet ihr
hier. Ein Beispiel für Apache ist diese Zeile:
Code:
Header add Strict-Transport-Security: "max-age=15768000;includeSubdomains"
Hinweis: "15768000" sind Sekunden und sind umgerechnet ein halbes Jahr. Dies zeigt die Zeit, in der der Header akzeptiert wird, und in der ihr HTTPS bereitstellen müsst, sonst kann auf eure Webseite nicht zugegriffen werden. Bevor ihr diesen Header also in die Einstellungen einfügt, seid euch sicher, dass ihr HTTPS über einen langen Zeitraum unterstützen könnt. (Wenn ihr HTTPS dann wirklich entfernen wollt, setzt zunächst max-age auf 0 und stellt HTTPS noch eine Weile bereit. Wenn alle Nutzer diesen neuen Header empfangen haben, könnt ihr dann HTTPS entfernen.)
6. Finale Überprüfung
Wenn alles fertig ist, sollte man das ganze in jedem Fall allerdings nochmal überprüfen lassen. Dazu lässt man den
Test von SSLLabs durchlaufen. Bekommt man eine Bewertung unter
A sollte man sich seine Konfiguration nochmal genau anschauen.
Ist man bei einem Share-Hoster hat man auf die Konfiguration allerdings kaum Einfluss. In diesem Fall kann man sich nur beim Hoster beschweren - im Extremfall kann man natürlich auch den Hoster wechseln oder auf einen Root-Server umziehen, auf dem man die TLS-Konfiguration selber machen darf.
Fertig
Wenn man dann fertig ist, kann man dies als allerletzten Schritt
noch im Forum verkünden.
PS: Möglicherweise ist euch aufgefallen, dass in unserem Security-Forum noch
ein paar weitere Sicherheitsfeatures genutzt wurden. Darüber kann ich, wenn ihr wollt, noch einen Thread/Post mit technischen Details schreiben. Bei Computerguard.de findet ihr ja schon mal eine grundlegende Erklärung des Prinzips.