Das OpenSSL-Framework stellt im Kryptografie-Umfeld bekanntermaßen das Gegenstück zum Schweizer Taschenmesser dar. Mit der Software lässt sich eine Certificate Authority zum Ausstellen und Validieren von X.509-Zertifikaten aufbauen. Der Open-Source-Tipp liefert eine Anleitung zum Setup einer solchen Certificate Authority. Das OpenSSL-Framework stellt im Kryptografie-Umfeld bekanntermaßen das Gegenstück zum Schweizer Taschenmesser dar. Mit der Software lässt sich eine Certificate Authority zum Ausstellen und Validieren von X.509-Zertifikaten aufbauen. Der Open-Source-Tipp liefert eine Anleitung zum Setup einer solchen Certificate Authority.
Im Unternehmensumfeld existieren Public-Key-Infrastrukturen (PKI), die beim Ausstellen eines X.509-Zertifikats helfen. Der Aufwand, ein solches Zertifikat zu beziehen, ist allerdings in manchen Fällen recht groß – zum Beispiel, wenn es um das Setup eines Testsystems geht. Hier kann die Ausstellung des Zertifikats unter Umständen mehrere Stunden oder gar Tage in Anspruch nehmen. Mithilfe einer öffentlichen Zertifizierungsstelle wie beispielsweise Let's Encrypt kämen Sie zumindest schnell an ein Domain-validated Certificate (DV). Gegebenenfalls soll das Zertifikat aber nicht auf öffentlichen Listen der Certificate Authority (CA) erscheinen. Zudem lassen sich auch nicht immer sämtliche Anforderungen einer öffentlichen CA umsetzen.
Eine weitere Möglichkeit besteht darin, mittels OpenSSL [1] ein selbstsigniertes Zertifikat auszustellen. Dies führt allerdings auf den Clientsystemen zu Fehlern, da diese das Zertifikat nicht validieren können. Daher ist es hilfreich, wenn Ihre Testumgebung über eine eigene CA verfügt. Im Folgenden zeigen wir den Aufbau einer einfachen OpenSSL-basierten CA. Das Framework ist auf nahezu sämtlichen Linux-Systemen vorhanden und das Setup geht zudem schnell von der Hand.
Zertifizierungsstelle installieren
Um die Installation möglichst einfach zu halten, konfigurieren wir auf einem Linux-System eine einzelne CA-Instanz, die sich dann auch um die Ausstellung der Zertifikate für die Zielsysteme beziehungsweise Endbenutzer kümmert. Üblicherweise ist jedoch zumindest noch eine weitere Zertifizierungsstelle als sogenannte Intermediate-CA zwischengeschaltet.
Im Unternehmensumfeld existieren Public-Key-Infrastrukturen (PKI), die beim Ausstellen eines X.509-Zertifikats helfen. Der Aufwand, ein solches Zertifikat zu beziehen, ist allerdings in manchen Fällen recht groß – zum Beispiel, wenn es um das Setup eines Testsystems geht. Hier kann die Ausstellung des Zertifikats unter Umständen mehrere Stunden oder gar Tage in Anspruch nehmen. Mithilfe einer öffentlichen Zertifizierungsstelle wie beispielsweise Let's Encrypt kämen Sie zumindest schnell an ein Domain-validated Certificate (DV). Gegebenenfalls soll das Zertifikat aber nicht auf öffentlichen Listen der Certificate Authority (CA) erscheinen. Zudem lassen sich auch nicht immer sämtliche Anforderungen einer öffentlichen CA umsetzen.
Eine weitere Möglichkeit besteht darin, mittels OpenSSL [1] ein selbstsigniertes Zertifikat auszustellen. Dies führt allerdings auf den Clientsystemen zu Fehlern, da diese das Zertifikat nicht validieren können. Daher ist es hilfreich, wenn Ihre Testumgebung über eine eigene CA verfügt. Im Folgenden zeigen wir den Aufbau einer einfachen OpenSSL-basierten CA. Das Framework ist auf nahezu sämtlichen Linux-Systemen vorhanden und das Setup geht zudem schnell von der Hand.
Zertifizierungsstelle installieren
Um die Installation möglichst einfach zu halten, konfigurieren wir auf einem Linux-System eine einzelne CA-Instanz, die sich dann auch um die Ausstellung der Zertifikate für die Zielsysteme beziehungsweise Endbenutzer kümmert. Üblicherweise ist jedoch zumindest noch eine weitere Zertifizierungsstelle als sogenannte Intermediate-CA zwischengeschaltet.
Listing 1 enthält das Shellskript "setup-ca.sh", mit dem Sie die CA installieren. Dieses erzeugt zuerst die benötigte Verzeichnisstruktur mit den korrekten Berechtigungen und anschließend den privaten und öffentlichen Schlüssel für die CA. Hierzu kommt die OpenSSL-Konfigurationsdatei "/etc/pki/tls/openssl.cnf" zum Einsatz. Sie besteht aus diversen Kategorien, die Sie bei Bedarf anpassen können. So ist es beispielsweise ganz hilfreich, in der Kategorie "[ req_distinguished_name ]" einige Standardwerte einzutragen, die dann in jedem Zertifikat übernommen werden. Somit sparen Sie sich einiges an Tipparbeit, wenn Sie ein neues Zertifikat von der CA anfordern.
Listing 1: Shellskript zum Erstellen einer OpenSSL-CA
Nachdem Sie das Shellskript "setup-ca.sh" ausgeführt haben, ist die CA bereits einsatzbereit. Mit dem Skript aus Listing 2 erzeugen Sie nun einen neuen Certificate Signing Request (CSR). Wenn Sie das Skript aufrufen, wird als erster Parameter der Hostname für das System erwartet, für das Sie ein Zertifikat anfordern. Neben dem CSR wird natürlich auch der dazugehörige private Schlüssel erzeugt. Nachdem Sie das Skript ausgeführt haben, liegen die beiden Dateien im Verzeichnis "/etc/pki/CA/csr/" beziehungsweise in "/etc/pki/CA/newcerts/".
Listing 2: Shellskript zum Erzeugen eines Certificate Signing Request
Um aus dem CSR nun ein Zertifikat zu erzeugen, senden Sie die Anfrage wieder mithilfe von OpenSSL an die soeben erzeugte CA (Bild 1). Listing 3 hält hierfür das Shellskript "setup-crt.sh" parat. Wichtig ist, dass Sie dem Skript wieder den Hostnamen als ersten Parameter übergeben, damit der Certificate Signing Request auch gefunden wird. Das Skript greift auf bestimmte Anweisungen der Kategorie "server_cert" aus der OpenSSL-Konfigurationsdatei zurück. Diese sorgen dafür, dass Sie das so erzeugte Zertifikat zusammen mit einem TLS-Service einsetzen können. In der Kategorie "usr_cert" hingegen befinden sich Extensions, die Sie benötigen, wenn Sie das Zertifikat stattdessen für einen Benutzer ausstellen möchten; beispielsweise wenn dieser das Zertifikat zusammen mit einer Smartcard einsetzen möchte. Weitere Informationen hierzu finden Sie in der Hilfeseite "man x509v3_config". Die jeweiligen X.509-Extensions sind natürlich ebenfalls sehr ausführlich im RFC 5280 [2] beschrieben.
Listing 3: Shellskript zum Signieren eines Certificate Signing Request
Das so erzeugte Zertifikat liegt schließlich im Verzeichnis "/etc/pki/CA/newcerts/". Im Anschluss können Sie dieses mit dem dazugehörigen privaten Schlüssel aus dem gleichen Verzeichnis auf das Zielsystem kopieren. Dort sind die beiden Dateien dann in der Konfiguration des Services zu hinterlegen, für den Sie das Zertifikat erzeugt haben. Der Befehl openssl verify -CAfile <Zertifikatspfad> schließlich verifiziert das Zertifikat.
Client muss CA vertrauen
Abschließend sei noch darauf hingewiesen, dass sämtliche Clients zur Verifizierung des neu ausgestellten Zertifikats natürlich auch über eine Kopie des CA-Zertifikats (oder der kompletten CA-Kette, falls Sie mit Intermediate-CAs arbeiten) verfügen müssen. Für webbasierte Dienste importieren Sie das CA-Zertifikat also einfach in Ihren Webbrowser und hinterlegen dieses am besten auch direkt im Trust-Store auf Ihrem System. Falls Sie den Speicherort hierfür nicht kennen, rufen Sie einfach openssl version -d auf.
Fazit
Der Open-Source-Tipp hat das grundlegende Setup einer OpenSSL-basierten CA vorgestellt. Weitere Themen, wie bespielsweise das Einbinden eines Online-Certificate-Status-Protocol-Responders, behandeln wir in einem späteren Open-Source-Tipp. Zusätzliche Informationen zum Thema finden Sie außerdem im kostenlosen E-Book "OpenSSL Cookbook" [3].