Da ich persönlich doch viel Wert darauf leg, dass meine Daten, wenn sie schon durchs Internet fließen, verschlüsselt übertragen werden, war eine meiner ersten Aktionen auf dem Server jede Verbindung wenigstens optional verschlüsselt anzubieten. Für die ersten Wochen erstellt ich nur schnell ein selbst signiertes Zertifikat, da ich um ehrlich zu sein keinen Kopf hatte mich näher mit dem ganzem Zertifikatthema zu beschäftigen.
Nun da ich am Wochenende mal ein wenig Zeit habe, hab ich mir das Thema nochmal genauer angeschaut.
Da auf dem Server noch ein paar andere Dienste laufen, welche ich gerne mit HTTPS absichern würde benötige ich also entweder für jeden Dienst/Subdomain ein eigenes Zertifikat, ein Multiple Domain Zertifikat oder besorge mir gleich ein WildCard Zertifikat.
Da ich nicht einsehen ein Haufen Geld bei VeriSign, Thawte oä. liegen zu lassen, schaute ich mich nach günstigeren/kostenloses Alternativen um. Die günstigste Alternative welche ich fand, war bei GoDaddy. Allerdings muss ich ehrlich sagen, ich bin nicht bereit 65€ für ein Multiple Domain Zertifikat inc. 5 Domains oder 132€ für ein WildCard Zertifikat hinzulegen. Dies wäre doch eine übertriebene Investition für einen kleine privaten Blog, welcher gerade mal 2 Wochen existiert. Also ging die Suche weiter…
Ja ich weiß, hört sich komisch an, aber Danke irgendwelcher Hacker wurde ich dann auf StartSSL aufmerksam. Diese bösen Mitmenschen hatte nämlich versucht in Server des israelischen Anbieters einzudringen um sich vermutlich dort Zertifikate für Domains auszustellen, welche nicht ihnen gehören. StartSSL ist die Zertifizierungsstelle des israelischen Unternehmen StartCom, welche kostenlos Zertifikate signiert und dessen Root Zertifikat in jedem aktuellen Browser integriert ist. Nach kurzer Recherche auf ihrer Website musste ich allerdings feststellen, dass das kostenlose Zertifikat nur für eine Domain gültig, um somit für mich unbrauchbar ist.
Ich kann jedem allerdings nur empfehlen sich solch ein Zertifikat zu holen, wenn er nur eine Domain damit absichern möchte!
Die Suche ging also weiter, und am Ende blieb ich dann bei CAcert hängen.
CAcert ist eine nicht kommerzielle Zertifizierungsstelle, welche sich zum Ziel gesetzt hat kostenlose Zertifikate an Privatpersonen auszustellen. Dies funktioniert deshalb, da CAcert keinen aufwendigen Verifizierungsprozess zu Validierung der Identität betreibt. Jeder der sich anmeldet kann direkt Client Zertifikate ausstellen.
Möchte man ein Server Zertifikat, ist hierfür der Zugriff auf eine Administrative Mail Adresse notwendig. Dort wird einem dann eine eMails zugeschickt, welche einen Link enthält um die Domain zu verifizieren.
Weitere Infos über die Funktionsweise von CAcert könnt ihr dem Wikipedia Eintrag entnehmen, da um ehrlich zu sein das komplette Thema hier den Rahmen sprengen würde.
Der Nachteil? Das Root Zertifikat von CAcert ist in keinem Browser vertreten! Sie versuchen zwar es in die einzelnen Browser zu integrieren, es wird denke ich aber noch eine Weile dauern bis es soweit ist.
Da mir das Prinzip hinter CAcert allerdings sehr gut gefällt, hab ich mich entschieden diesen Nachteil in Kauf zu nehmen.
Im folgenden möchte ich euch nun zeigen wie ihr ein WildCard SSL Zertifikat erstellt, bei CAcert signieren lasst, im Apache einbindet und eurem Browser das Root Zertifikat von CAcert beibringt:
Voraussetzung:
- Abgeschlossene Registrierung bei CAcert inc. Validierung der Domain
- Apache2 Webserver mit aktiviertem HTTPS Modul
- OpenSSL
Ich habe das ganze auf einem Ubuntu 10.04 getestet, ich denke allerdings das es auf anderen Systemen genauso funktionieren wird.
Ihr geht also nun her und erstellt euch mit OpenSSL ein Zertifikat:
openssl req -newkey rsa:2048 -subj /CN=*.s0me0ne.de -nodes -keyout s0me0ne.de_key_.pem -out s0me0ne.de.csr.pem cat s0me0ne.de.csr.pem
Nun kopiert man ab „—–BEGIN CERTIFICATE REQUEST—–“ bis „—–END CERTIFICATE REQUEST—–“ alles und fügt das ganze bei CAcert in die Server-Zertifikate Maske ein. Danach muss nur noch einmal bestätigt werden das man das Zertifikat tatsächlich ausstellen möchte. Das Zertifikat speichern wir nun auf dem Server und passen die Apache Config dementsprechend an:
<VirtualHost *:443> ... SSLEngine on SSLCiphersuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:+SSLv2:+SSLv3:TLSv1:-LOW SSLCertificateFile /path/to/sslfile/s0me0ne.de_certificate.pem SSLCertificateKeyFile /path/to/sslfile/s0me0ne.de_key_.pem SSLVerifyDepth 2048 SSLVerifyClient none ... </VirtualHost>
Danach müsst ihr nur noch einmal den Apache restart und schon sollte das Zertifikat genutzt werden können.
/etc/init.d/apache2 restart
Nun muss nur noch das Zertifikat in die verschiedenen Browser eingetragen werden. Ich beschränke mich hier auf die 3 meist genutzten Browser (Mai 2011).
Das Root Zertifikat von CAcert bekommt ihr hier.
Firefox
–> Einstellungen –> Erweitert –> Verschlüsselung –> Zertifikate anzeigen –> Zertifizierungsstellen –> Importieren
- – root.crt auswählen
- – Hacken setzen bei „Dieser CA vertrauen, um Websites zu identifizieren.“
- – Mit OK bestätigen
Chrome/Internet Explorer
Da Chrome auf dem Zertifikatsspeicher von Windows/Internet Explorer aufbaut, hier hier nur einmal folgendes durchzufügen:
–> Systemsteuerung –> Internetoptionen –> Inhalte –> Zertifikate –> Vertrauenswürdige Stammzertifizierungsstellen –> Importieren
- – Weiter –> root.crt auswählen –> Weiter –> Weiter –> Fertig stellen
- – Sicherheitsabfrage mit „Ja“ beantworten.