Hallo,
in diesem Tutorial möchte ich euch gerne zeigen, wir ihr euch ein kostenloses oder auch kostenpflichtiges, jedoch sehr günstiges SSL Zertifikat für euren Webserver, sprich eure Webseite beantragen und korrekt einrichten könnt. Meiner Meinung nach, sollte das für jedes Webinterface, wo Kunden drauf zugreifen, gemacht werden.
Inhaltsverzeichnis
- Ist das Thema für mich interessant?
- Anbieter für SSL Zertifikate
- SSL Zertifikat beantragen
- SSL Zertifikat einrichten
- Externe SSL Test Webseiten
Beachtet bitte, dass das Thema SSL immer aktuell gehalten werden muss und es daher mal vorkommen kann, dass dieses Thema nicht ganz perfekt ist. Ich zeige euch das ganze anhand eines Linux Debian Wheezy 7.8 Systems. Der installierte Webserver ist ein nginx 1.6.2 aus den Wheezy Backports. Beim apache Webserver werden natürlich andere Konfigurationen benötigt, da die Syntaxe anders sind!
$ uname -aLinux web01 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u1 x86_64 GNU/Linux$ cat /etc/debian_version7.8$ nginx -vnginx version: nginx/1.6.2$ cat /etc/apt/sources.listdeb http://ftp.de.debian.org/debian/ wheezy maindeb-src http://ftp.de.debian.org/debian/ wheezy maindeb http://security.debian.org/ wheezy/updates maindeb-src http://security.debian.org/ wheezy/updates main# wheezy-updates, previously known as 'volatile'deb http://ftp.de.debian.org/debian/ wheezy-updates maindeb-src http://ftp.de.debian.org/debian/ wheezy-updates main# Backports for nginxdeb http://ftp.de.debian.org/debian/ wheezy-backports maindeb-src http://ftp.de.debian.org/debian/ wheezy-backports main
1. Ist das Thema für mich interessant?
Voraussetzung Nummer 1 hierfür ist natürlich, dass du einen Webserver und eine Webseite hast, die über das Internet zugänglich ist. Wenn du sie nur von deinem lokalen Netz aus erreichen kannst, benötigst du nicht zwingend ein SSL Zertifikat, außer es handelt sich zum Beispiel um ein Firmennetz oder ähnliches. Da wäre es dann wieder ratsam.
Die zweite Voraussetzung ist die, dass man auf der Webseite Daten zum Übermitteln angeben kann, die nicht unbedingt jeder haben sollte. Hierzu zählen zum Beispiel folgende Daten:
- Personenbezogene Daten, wie Vor- und Nachname, Adresse, Geburtsdatum und -ort
- Login Daten, wie E-Mail Adresse, Benutzername und Passwort
Wenn beides auf dich zutrifft, kannst du jetzt entscheiden, ob du deine Webseite und deren Besucher vor fremden Schnüfflern schützen möchtest oder nicht. Von HTTP (ohne SSL Zertifikat) auf HTTPS (mit SSL Zertifikat) gibt es lediglich einen grundlegenden Vorteil bzw. Nutzen: Es verschlüsselt die Verbindung, sodass andere nicht im Klartext die übertragenen Daten mitschneiden können. So kommt z.B. ganz grob und einfach gesagt statt dem Passwort "sehrGeheim" das verschlüsselte Passwort "646c4f71c875dc765f868ec04378ea5a5b16212ea72c8c7e4784b92c5d3d5b82" beim Schnüffler an.
Ein anderer Vorteil ist, dass ihr damit die Identität eurer Webseite besser festlegt und euch von Fake-Webseiten unterscheidet. Ein weiterer ist, dass anhand der Algorithmen geprüft werden kann, ob die Daten vollständig und unverändert übertragen wurden. Die Webseite Security Server Deutschland erklärt das finde ich sehr schön und sollte euch hierzu auch mehr Auskunft geben.
Zum Schluss werdet ihr ein grünes HTTPS Schloss haben:
Und SSL Labs wird eure Webseite mit mindestens einem schönen grünen "A" (nach amerikanischen Noten) bewerten, insofern die hier vorliegenden Konfigurationen noch entsprechend aktuell sind:
Und letztendlich wird auch SSL Shopper eure Installation der Zertifikate als korrekt anmerken:
2. Anbieter für SSL Zertifikate
Anbieter für SSL Zertifikate gibt es wie Sand am Meer. Jeder bietet unterschiedliche Zertifikate an, die entsprechend mehr oder weniger kosten. Die einen liefern das Zertifikat auch sehr einfach als ZIP-Datei aus, während man bei anderen relativ mühsam die Dateien einzeln erstellen und downloaden, sowie ggfs. zusammen basteln muss.
Mein Tipp an euch, wenn ihr Anbieter kennen lernen möchtet: Benutzt Google und gibt mal folgendes ein, wenn ihr...
- ein kostenloses Zertifikat möchtet: ssl zertifikat kostenlos
- ein kostenpflichtiges Zertifikat möchtet: ssl zertifikat kaufen
Ein paar bekannte und wohl viel (Vermutung) genutzte Anbieter sind die nachfolgenden:
- StartSSL.com (StartCOM) - https://www.startssl.com/
- RapidSSL - https://www.rapidssl.com/
- Comodo SSL - https://ssl.comodo.com/
- GeoTrust - https://www.geotrust.com/de/
- DigiCert - https://www.digicert.com/
- GoDaddy - https://de.godaddy.com/?ci=
- GlobalSign - https://www.globalsign.com/de-de/
Wir werden unser Zertifikat in diesem Beispiel bei StartSSL.com (StartCOM) holen, denn dort gibt es kostenlose (1 Jahr gültig) und sehr günstige kostenpflichtige (2 Jahre gültig) Zertifikate, wobei das abhängig von der Class ist. Sobald ein Zertifikat abgelaufen ist, könnt bzw. müsst ihr es natürlich manuell wieder erneuern. Das ist jedoch bei jedem Anbieter normal.
Neukunden sind automatisch "Class 1" zertifiziert, wodurch jedoch eine gewisse Einschränkung im Gegensatz zu "Class 2" besteht. Dafür sind Class 1 Zertifikate vollständig kostenlos, während Class 2 Zertifikate das zwar auch sind, jedoch die Hochstufung des Accounts entsprechend Bearbeitungsgebühren kostet. Genauere Details könnt ihr der Webseite von StartCOM entnehmen: bzw. [url='http://www.startssl.com/?app=39']StartSSL™ Certificates & Public Key Infrastructure']StartSSL™ Certificates & Public Key Infrastructure
Beachtet bei der Webseite bitte, dass sie regelmäßige Wartungen am Wochenende durchführen, um die Sicherheit, sowie Services zu optimieren:
Zitat von https://www.startssl.com/Some of our services are offline and under maintenance during the night hours on weekends until 7:00 AM GMT in the morning. We apologize for the temporary inconvenience and thank you for your understanding. StartCom Ltd.
3. SSL Zertifikat beantragen
Bei Class 1 ist folgendes wichtig, um den Revocation Gebühren in Höhe von 24,90 USD zu entgehen: Überlegt euch im Voraus GENAU, welche Sub-Domains alle für die Domain mit im Zertifikat mit inbegriffen werden sollen. Wenn eine fehlt, müsst ihr das Zertifikat kündigen und dann neu erstellen. Das Kündigen kostet euch dabei die genannten "Revocation Gebühren". Angenommen ihr habt die Domain "example.de", wären folgende Sub-Domains z.B. möglich:
- www.example.de
- wiki.example.de
- support.example.de
- ts3wi.example.de
Bei Class 2 dagegen ist es relativ egal, denn da habt ihr die Möglichkeit, ein weiteres Zertifikat mit den selben Sub-Domains einfach erneut anzulegen. Hier muss lediglich der CN (Common Name) des Zertifikats immer anders sein, wodurch es sich durchaus lohnt, diesen mit einem Prefix und numerischen Wert zu setzen - zum Beispiel: ssl0001.example.de. Die Sub-Domains werden nicht als CN, sondern als SAN (Subject Alternative Name) hinterlegt. Das war auch der Grund, warum ich meinen Account auf "Class 2" aufgestuft habe.
Beantragen tut ihr das Zertifikat dann wie folgt:
- Nachdem ihr euch einen Account bei StartCOM angelegt habt, loggt ihr euch mit eurem Client Zertifikat ein
WICHTIG: Keine Trash-Mail/Wegwerf E-Mail benutzen, da ihr darauf alle Bestätigungen etc. erhalten werdet - Zunächst müsst ihr die Domain validieren, für die ihr euer Zertifikat erstellen möchtet
- Validations Wizard
- "Domain Validation" durchführen
- Den Schritten des Wizards folgen; zum Schluss solltet ihr die Domain rechts im Menü unter "Domain Validations" mit einem grünen Haken sehen
- Als nächstes erstellen wir auf unserer Linux Maschine ein CSR (Certificate Signing Request), mit dem wir dann unser CRT (Certificate) beantragen
- Jetzt beantragen wir das CRT (Certificate) mit Hilfe unser neu erstellten CSR bei StartCOM
- Certificates Wizard
- "Web Server SSL/TLS Certificate" durchführen
- Generate Private Key: "Skip", da wir ein eigenes CSR bereits erstellt haben und es deutlich besser ist und schneller geht
- Vollständigen Inhalt unseres CSR "example.de.sha256.csr" bei StartCOM einfügen
- Domain wählen, für die ihr das Zertifikat ausstellen/erstellen möchtet: example.de
- ACHTUNG(!): Die erste Sub-Domain ist die CN! Ansonsten einfach alle benötigten Sub-Domains durch einen Klick auf "Add More" einfügen
- "Continue", sobald alle gewünschten Sub-Domains aufgenommen wurden, sowie anschließend nochmal überprüfen, ob wirklich alle drin sind
- "Continue", um das Zertifikat von StartCOM signieren und ausstellen zu lassen
- Fertig - jetzt dauert es maximal 3 Stunden, bis ihr eine E-Mail erhaltet, dass das Zertifikat zum Download bereit steht. Meistens ist es innerhalb von 15 Minuten bereits fertig.
Zusätzlich benötigen wir noch das Intermediate Server CA (Certification Authority), sowie das Root CA. Beide erhält man hier: Index of /certs
Um es einfacher zu halten, ist hier der direkt Download:
- Intermediate Server CA: sub.class1.server.ca.crt bzw. sub.class2.server.ca.crt (je nach eurem Class Status)
- Root CA: ca.crt
Jetzt besitzt ihr folgende Dateien für euer Zertifikat:
- CSR: example.de.sha256.csr
- KEY: example.de.key
- CRT: example.de.crt
- Intermediate Server CA: sub.class1.server.ca.crt bzw. sub.class2.server.ca.crt (je nach eurem Class Status)
- Root CA: ca.crt
4. SSL Zertifikat einrichten
Um das Zertifikat einzurichten, müssen wir dem Webserver die entsprechende Konfiguration mitgeben. Das ganze sieht dann so aus:
# SPDY ist ein experimentelles TCP-basiertes Netzwerkprotokoll von Google: http://de.wikipedia.org/wiki/SPDYlisten *:443 ssl spdy;# Keep-Alive Verbindungen aktivieren (Reduziert CPU Load)keepalive_timeout 70; # SSL Caching für mehr Performancessl_session_cache shared:SSL:10m;ssl_session_timeout 10m; # SSL Protokollessl_protocols TLSv1 TLSv1.1 TLSv1.2; # Cipher Suitesssl_prefer_server_ciphers on;ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5;# OCSP - Online Certificate Status Protocolssl_stapling on;ssl_stapling_verify on; # SSL Zertifikatessl_certificate /etc/ssl/example.de.crt; # Webseiten CRT + Intermediate Server CAssl_certificate_key /etc/ssl/example.de.key; # Webseiten Private Keyssl_trusted_certificate /etc/ssl/ca-certs.pem; # Intermediate Server CA + Root CA # Diffie-Hellman parameter for DHE ciphersuites# to generate your dhparam.pem file, run in the terminal# openssl dhparam -out /etc/ssl/dhparam.pem 4096ssl_dhparam /etc/ssl/dhparam.dh; # HSTS - http strict transport security# Achtung "Bug": includeSubDomains führt zu dem Problem, dass auch alle anderen Subdomains mit HTTPS geforcet aufgerufen werden, obwohl sie vielleicht kein HTTPS haben.add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';# HTTPS Weiterleitung/Forceif ($scheme != "https") { rewrite ^ https://www.example.de$request_uri? perma}
Jetzt müssen wir die Zertifikatsdateien entsprechend zusammenbauen, damit die Zertifikatskette in Ordnung ist:
- In die Datei "example.de.crt" packen wir in folgender Reihenfolge die Zertifikate rein: Webseiten CRT + Intermediate Server CA
- In die Datei "example.de.key" packen wir in folgender Reihenfolge die Zertifikate rein: Webseiten Private Key
- In die Datei "ca-certs.pem" packen wir in folgender Reihenfolge die Zertifikate rein: Intermediate Server CA + Root CA
Als nächstes benötigen wir noch die "dhparam.dh" Datei, um die Sicherheit nochmals explizit zu erhöhen. Das wird ebenfalls mit Hilfe von OpenSSL generiert:
Sobald die Dateien korrekt abgelegt wurden, kann die Konfiguration mit Hilfe eines Reloads aktiv geschaltet werden:
5. Externe SSL Test Webseiten
Ob euer SSL Zertifikat korrekt und mit den aktuell optimalsten Einstellungen eingerichtet wurde, könnt ihr auf den beiden nachfolgenden Webseiten sehr gut überprüfen, da diese immer aktuell gehalten werden:
- Qualys SSL Labs: SSL Server Test SSL Server Test (Powered by Qualys SSL Labs)
Prüft, ob die Einstellungen des Servers passen und ob veraltete Algorythmen, Kryptographien, Cipher Suites etc. verwendet werden - SSL Shopper: SSL Checker SSL Checker - SSL Certificate Verify
Prüft, ob die Kette der Zertifikate korrekt installiert ist und ob die Zertifikate gültig, sowie vertrauenswürdig sind
Ich hoffe, ich konnte hiermit einigen weiterhelfen und freue mich auf konstruktives Feedback!