make then make install
Die Hauptfunktion von SSL im Internet besteht darin, die Verschlüsselung und das Vertrauen zu erleichtern, mit denen ein Webbrowser die Authentizität einer Website überprüfen kann. SSL funktioniert jedoch auch umgekehrt – Client-SSL-Zertifikate können verwendet werden, um einen Client beim Webserver zu authentifizieren. Denken Sie an SSH Public / Private Schlüsselpaare, wenn Ihnen das bekannt ist. In diesem Blogbeitrag werden die Schritte zum Erstellen eines Zertifikatsautoritätszertifikats, zum Signieren eines Serverzertifikats und zum Installieren in Apache sowie zum Erstellen eines Client-Zertifikats in einem von Webbrowsern verwendeten Format beschrieben.
Die Installation eines Betriebssystems und Apache liegt außerhalb des Umfangs des Blogbeitrags und ich gehe davon aus, dass Sie eine funktionierende Apache-Installation haben, bevor wir beginnen. Ich verwende in diesem Blogbeitrag ein Ubuntu 12.04.4-System.
Generieren eines Zertifikats der Zertifizierungsstelle (CA)
Der erste Schritt besteht darin, ein CA-Zertifikat zu generieren. Dieses CA-Zertifikat muss nicht auf Ihrem Webserver generiert werden – es kann sich auf jedem Computer befinden, den Sie zum Generieren von SSL-Zertifikaten verwenden. Nach der Erstellung fungiert das CA-Zertifikat als vertrauenswürdige Autorität für Ihre Server- und Client-Zertifikate. Es ist das Äquivalent von Verisign oder Comodos in der realen Welt von SSL, aber Sie möchten Ihr CA-Zertifikat nicht für eine große öffentliche Website verwenden, da sein Vertrauen nicht überall in Browser integriert wird.
Generieren Sie Ihr CA-Zertifikat mit diesem Befehl:
openssl req -newkey rsa:4096 -keyform PEM -keyout ca.key -x509 -days 3650 -outform PEM -out ca.cer
Dann halten Sie sie geheim – halten Sie sie sicher. Wenn jemand diese Dateien erhalten würde, könnte er Server- und Client-Zertifikate generieren, denen unser Webserver vertraut, wie er unten konfiguriert wird.
Generieren Sie Ihren Apache-Server-SSL-Schlüssel und -Zertifikat
Jetzt, da wir unser CA-Zertifikat haben, können wir das SSL-Zertifikat generieren, das von Apache verwendet wird.
- Generieren Sie einen privaten Serverschlüssel.
openssl genrsa -out server.key 4096
- Verwenden Sie den privaten Schlüssel des Servers, um eine Zertifikatgenerierungsanforderung zu generieren.
openssl req -new -key server.key -out server.req -sha256
- Verwenden Sie die Zertifikatgenerierungsanforderung und das CA-Zertifikat, um das Serverzertifikat zu generieren.
openssl x509 -req -in server.req -CA ca.cer -CAkey ca.key -set_serial 100 -extensions server -days 1460 -outform PEM -out server.cer -sha256
- Bereinigen – Nachdem das Zertifikat erstellt wurde, benötigen wir die Anforderung nicht mehr.
rm server.req
Installieren Sie das Serverzertifikat in Apache
Auf meinem Server wird Ubuntu 12.04.4 ausgeführt, sodass alle hier referenzierten Pfade und Befehle für dieses Betriebssystem gelten.
- Kopieren Sie das CA-Zertifikat an einen festen Ort. Wir müssen unser CA-Zertifikat in Apache angeben, da es sich um eine selbst generierte CA handelt und nicht um eine, die überall in Betriebssystemen enthalten ist.
cp ca.cer /etc/ssl/certs/
- Kopieren Sie das Serverzertifikat und den privaten Schlüssel an einen dauerhaften Ort.
cp server.cer /etc/ssl/certs/server.crtcp server.key /etc/ssl/private/server.key
- Aktivieren Sie das SSL-Modul in Apache.
a2enmod ssl
- Aktivieren Sie die SSL-Site in Apache und deaktivieren Sie die HTTP-Site.
a2ensite default-ssla2dissite default
- Bearbeiten Sie /etc/apache2/sites-enabled/000-default-ssl (die Konfigurationsdatei für die SSL-aktivierte Site) und fügen Sie:
SSLCACertificateFile /etc/ssl/certs/ca.cerSSLCertificateFile /etc/ssl/certs/server.crtSSLCertificateKeyFile /etc/ssl/private/server.key
- Wenden Sie die Konfiguration in Apache an.
service apache2 restart
Im Moment, wenn Sie Ihre https-Site besuchen, erhalten Sie einen SSL-Fehler ähnlich wie „SSL Peer konnte einen akzeptablen Satz von Sicherheitsparametern nicht aushandeln.“ Das ist gut – es bedeutet, dass Ihre Website keine Verbindung akzeptiert, es sei denn, Ihr Browser verwendet ein vertrauenswürdiges Client-Zertifikat. Wir werden jetzt einen generieren.
Generieren eines Client-SSL-Zertifikats
- Generieren eines privaten Schlüssels für den SSL-Client.
openssl genrsa -out client.key 4096
- Verwenden Sie den privaten Schlüssel des Clients, um eine Zertifikatsanforderung zu generieren.
openssl req -new -key client.key -out client.req
- Stellen Sie das Clientzertifikat mithilfe der Zertifikatsanforderung und des Zertifikats/ Schlüssels der Zertifizierungsstelle aus.
openssl x509 -req -in client.req -CA ca.cer -CAkey ca.key -set_serial 101 -extensions client -days 365 -outform PEM -out client.cer
- Konvertieren Sie das Clientzertifikat und den privaten Schlüssel in das pkcs # 12-Format zur Verwendung durch Browser.
openssl pkcs12 -export -inkey client.key -in client.cer -out client.p12
- Bereinigen – Entfernen Sie den privaten Client-Schlüssel, das Client-Zertifikat und die Client-Anforderungsdateien, da der pkcs12 über alles verfügt, was benötigt wird.
rm client.key client.cer client.req
Sieht aus wie ein ziemlich ähnlicher Prozess zum Generieren eines Serverzertifikats, oder?
Zuletzt importieren Sie die .p12-Datei in Ihren Browser. Unter Windows können Sie auf die Datei doppelklicken, um sie in den Keystore des Betriebssystems zu importieren, der von IE und Chrome verwendet wird. Öffnen Sie für Firefox die Optionen -> Erweitert -> Zertifikate -> Zertifikate anzeigen -> Ihre Zertifikate und importieren Sie das Zertifikat.
Besuchen Sie nun Ihre Website mit dem Browser, in den Sie das Clientzertifikat importiert haben. Sie werden wahrscheinlich aufgefordert, welches Clientzertifikat Sie verwenden möchten – wählen Sie es aus. Dann werden Sie authentifiziert und zugelassen!