19 Aug |
|
|
Das Aufsetzen eines Joomla-tauglichen Webservers habe ich ja schonmal ausführlich beschrieben. Jetzt stand ich vor der Aufgabe, diesen Webserver SSL-tauglich zu machen. Ich muss zugeben, von SSL und dem Erstellen von Zertifikaten nur wenig Ahnung zu haben. Dementsprechend bin ich auch erstmal einem Tutorial gefolgt, dass im Nachhinein betrachtet sehr rudimentär ist: Ich hatte ein Zertifikat erstellt, hier was kopiert, da was symbolisch verlinkt, den Apache-Webserver etwas umkonfiguriert und SSL lief. Mit Firefox war dieses Tutorial einigermaßen brauchbar. Ich brauchte das Zertifikat nur einmalig genehmigen und es lief. Der Internet Explorer sieht das allerdings etwas anders. Bei jedem neuen Besuch der Seite, beschwerte dieser sich über Zertifikatsfehler, gegen die auch das Importieren des Zertifikats nicht half. Zertifikate ertsellen und signierenFür das Erstellen der Zertifikate habe ich ein Tutorial von HowToForge verwendet, welches sehr ausführlich ist. Allerdings enthält es keine Anleitung zur Installation und vor allem Konfiguration eines Apache. Diesen Punkt habe ich weiter unten ausgeführt. server:~# cd /root Im Ordner CA werden nun die Dateien 'serial' und 'index.txt' erzeugt. 'serial' dient - wie der Name schon andeutet - als Quelle für eindeutige Seriennummer und wird bereits beim erstellen mit '01' belegt. Jedesmal wenn ein Zertifikat erstellt wird, wird diese Ziffer automatisch hochgezählt. 'index.txt' stellt eine kleine Datenbank dar, in der meine erstellten Zertifikate verwaltet werden. server:~# echo '01' >serial Als nächstes wird eine Konfigurationsdatei namens 'openssl.cnf' erstellt server:~# vi openssl.cnf und mit folgenden Inhalt befüllt # Konfigurationsdatei zum Download (muss anschließend in openssl.cnf umbenannt und an die eigenen Gegebenheiten angepasst werden). Die Bedeutung der einzelnen Abschnitte können oben erwähnten HowTo entnommen werden. Ab jetzt werden Zertifikate erstellt. Als erstes wird das Zertifikat und der private Schlüssel der CA erstellt: server:~# openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem↵ Mit 'req -x509' wird das eigentliche Zertifikat generiert, '-extensions v3_ca' gibt dabei die Art des Zertifikats an, wie es im entsprechenden Abschnitt der Konfiguration angegeben ist (hier also ein CA-Zertifikat mit Passwort). Der private Schlüssel wird in das 'private'-Verzeichnis geschrieben, des Zertifikat selbst in den aktuellen Ordner. Das Zertifikat der CA selbst erhält eine Lebensdauer von 10 Jahren. Das ist durchaus sinnvoll, da mit Ablauf des CA-Zertifikats alle damit signierten Zertifikate ihre Gültigkeit verlieren würden. Die Gültigkeit der einzelnen Zertifikate ist in der Konfigurationsdatei mit 'default_days = 365' auf ein Jahr festgelegt. Im nächsten Schritt wird der Zertifikats-Request erstellt, mit dem zukünftig der Webserver authentifiziert werden soll. server:~# openssl req -new -nodes -out req.pem -config ./openssl.cnf Im folgenden Dialog sind der "Organizational Unit Name" (OU), die Kontak-Email-Adresse sowie der "Common Name" (CN) nacheinander anzugeben. Als OU kann man einen Hinweis daruf geben, wofür das Zertifikat gedacht ist (bsp. eben für den Webserver). Der CN ist die IP oder FQDN des Systems, dass mit diesem Zertifikat authentifiziert werden soll. Im Falle des Webservers wäre das genau die Adresse, die man im Browser angeben würde. Ist der CN falsch und stimmt nicht mit der Adresse überein wird sich der Browser über einen Zertifkatfehler beschweren, da er davon ausgeht, dass das Zertifikat missbraucht wird (dieser Fehler ist mir u.a. auch unterlaufen, weshalb der IE sich so penetrant beschwert hat). Nun muss der Zertifikats-Request von der selbsterstellten CA signiert werden. Das abgefragte Passwort ist jenes, welches beim Erstellen des CA-Zertifikats zu Beginn vergeben wurde. server:~# openssl ca -out cert.pem -config ./openssl.cnf -infiles req.pem Als Output erhält man das Zertifikat (cert.pem) sowie eine Kopie im Ornder 'newcerts', welche die aktuelle Seriennummer (aus 'serial') als Namen trägt. Die Datenbank 'index.txt' wurde um einen Eintrag erweitert. server:~# mv cert.pem tmp.pem Zu guter Letzt muss das CA-Zertifikat an den Nutzer gebracht werden. Je nach Möglichkeiten kann man es auf Netzlaufwerken oder per Mail den Nutzern zukommen lassen. Man kann das Zertifikat aber auch zum Download als crt-Datei anbieten. Dazu reicht es die Datei 'cacert.pem' in das www-Verzeichnis zu kopieren und umzubennen und die Besitzverhältnisse neu zu regeln. server:~# cp cacert.pem /var/www/meinpfad/beliebiger_name.crt Das Zertifikat kann nun über die entsprechende Web-Adresse abgerufen werden. Beim Öffnen des Zertifikats wird man in der Regel automatisch durch die lokale Installation geführt. Anschließend sollten alle damit signierten Zertifikate anstandslos von IE und Firefox akzeptiert werden. Apache SSL-fähig machenUm den Apache SSL-fähig zu machen, bin ich wie folgt vorgegangen. Ich habe zunächst im Apache-Ordner ein Verzeichnis für Zertifikate angelegt und mein Zertifikat nebst Schlüssel dorthin kopiert. server:~# mkdir /etc/apache2/ssl Im Ordner '/etc/apache2/sites-available' habe ich nun eine neue Datei namens 'ssl' angelegt server:~# vi /etc/apache2/sites-available/ssl und mit folgendem Inhalt befüllt: <VirtualHost *:443> Nun noch einen Link unter 'sites-enabled' auf die eben erstellte Datei setzen server:~# ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/ssl Damit der Apache auch weiß, dass er auf Port 443 lauschen soll, notiert man dies in der '/etc/apache2/ports.conf' mit Listen 443 Abschließend muss das SSL-Modul akitiviert und Apache neu gestartet werden server:~# a2enmod ssl Alternativ kann man diese Konfiguration auch im Webmin vornehmen. Ab diesem Zeitpunkt sollte der Webserver SSL-verschlüsselt laufen. |

Kommentare
Alle Kommentare dieses Beitrages als RSS-Feed.