RAID-Technologie verspricht höhere Performance und mehr Sicherheit beim permanenten Speichern von Daten. Die ADMIN-Redaktion gibt einen Überblick über ... (mehr)

Apache zertifiziert

Als praktisches Beispiel soll hier der Apache-Webserver dienen. Die Konfiguration des Servers wurde entsprechend so geändert, dass statt »mod_ssl« nun mod_nss zum Einsatz kommt. Das entsprechende RPM bringt bereits eine NSS-Datenbank mit, die im Verzeichnids / »etc/httpd/alias/« liegt. Eine neue Datenbank richtet der folgende Befehl ein:

certutil -N -d /etc/httpd/alias-new/

Ein selbst signiertes CA-Zertifikat erstellt der folgende Befehl:

certutil -S -n "TUXGEEK CA CERT" -s "cn=CAcert" -x -t "CT,," -m 1000 -v 120 -d /etc/httpd/alias-new/

An dieser Stelle zeigt Certutil bereits an, dass das CA-Zertifikat in der NSS Datenbank gespeichert wurde:

certutil -L -d /etc/httpd/alias-new/

Im Anschluss ist auf dem System, auf dem das Zertifikat verwendet werden soll, ein entsprechender Zertifikats-Request (CSR) zu erzeugen:

certutil -d /etc/httpd/alias-new/ -R -s "CN=www.tuxgeek.de" -o tuxgeek.csr -g 2048-k rsa

Der nächste Schritt besteht nun dann darin, den zuvor erzeugten Client-Request durch die CA zu signieren:

certutil -C -m 2345 -i tuxgeek.csr -o tuxgeek.crt -c "TUXGEEK CA CERT" -d /etc/httpd/alias-new/

Schließlich steht nun das angefragte X.509-Zertifikat zur Verfügung und kann auf dem Apache-System in die dort vorhandene NSS Datenbank importiert werden:

certutil -d /etc/httpd/alias-new/ -A -n tuxgeek-cert -t ,, -i tuxgeek.crt

Da das Zertifikat zuvor im Binary-Format erzeugt wurde, lässt es sich aktuell nur mit »certutil« anzeigen. Alternativ besteht die Möglichkeit, direkt ein ASCII-Zertifikat anzulegen (mithilfe der Option »-a« beim Erzeugen des CSR):

certutil -d /etc/httpd/alias-new/ -L -ntuxgeek-cert

Sind alle Zertifikate erzeugt, bleibt noch, den Apache-Server zu konfigurieren und die korrekten Namen für Server- und CA-Zertifikat einzugeben. Auf den Client-Systemen muss ebenfalls noch das CA-Zertifikat importiert werden. Dieser Schritt entfällt natürlich, wenn der Request an eine externe CA ging, oder die eigene CA durch diese verifiziert wurde und das externe CA-Zertifikat bereits auf den Client-Systemen vorhanden ist. Im ersten Fall ist das CA-Zertifikat aus der Datenbank zu exportieren, bevor es auf den Clients importiert werden kann:

certutil -d /etc/httpd/alias-new/ -L -r -n "TUXGEEK CA CERT" > cacert.crt

Wer möchte, kann natürlich sein Server-Zertifikat mit dem dazugehörigen privaten Schlüssel sichern und die PKCS#12-Datei mit einer Passphrase sichern:

pk12util -d /etc/httpd/alias-new/ -o apache.p12 -n tuxgeek-cert

Wer an dieser Stelle gedacht hat, die Tipparbeit ist endlich vorbei, der irrt. Wie zu Anfang bereits erwähnt, mag natürlich noch der Fall auftreten, dass bereits ein PEM codiertes Zertifikat vorliegt, das in der Vergangenheit einmal mittels OpenSSL erzeugt wurde, und das nun in eine NSS Datenbank importiert werden muss. Dies ist nicht weiter schwer, OpenSSL erledigt dies mit einem einzelnen Befehl. Das Beispiel geht davon aus, dass das Zertifikat und der private Schlüssel im aktuellen Verzeichnis liegen:

openssl pkcs12 -in httpd.crt -inkey httpd.pem -export -out httpd.p12

Um die so erzeugte PKCS#12-Datei in die NSS-Datenbank zu schieben, kommt nun wieder »pk12util« zum Einsatz:

pk12util -d /etc/httpd/alias-new/ httpd.p12

Das PKCS#12-Format eignet sich auch prima dafür, das Zertifikat mit dazugehörigen privaten Schlüssel zwischen verschiedenen Systemen auszutauschen. Beispielsweise auch dann, wenn mittels eines Benutzer-Zertifikates eine Anmeldung auf einem Webserver stattfinden soll. Ein Import der Datei in den eigenen Webbrowser sorgt dafür, dass er das Zertifikat kennt und die Anmeldung klappt.

Mit Python skripten

Wer nach der ganzen Arbeit nun noch Lust hat, sich ein wenig weiter mit den Network Security Services auseinanderzusetzen und vielleicht das Framework in die eigene Anwendung interieren möchte, für den sei an dieser Stelle darauf hingewiesen, dass diverse Sprach-Bindings für den Zugriff auf die NSS-API existieren. Beispielsweise existiert für Python das Paket »python-nss« , das einige nette Beispiele mitbringt, mit denen der Einstieg in die NSS-API sehr schnell gelingt. Viel Spaß. (ofr)

Der Autor

Thorsten Scherf arbeitet als Senior Consultant für Red Hat EMEA. Er ist oft als Vortragender auf Konferenzen anzutreffen. Wenn neben Arbeit und Familie noch Zeit bleibt, nimmt er gerne an Marathonläufen teil.

comments powered by Disqus
Mehr zum Thema

PKI mit FreeIPA

Auch wenn Open-Source-Werkzeuge zum Verwalten von X.509-Zertifikaten rar sind, steht doch mit FreeIPA ein umfassendes Identity-Management-Framework bereit, mit dem sich sehr leicht eine Public-Key-Infrastruktur aufbauen lässt. Die Administration erfolgt anschließend wahlweise über ein Webfrontend oder mit Kommandozeilentools. Wir zeigen Installation und Konfiguration des Framework.
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023