Erstellung von X.509-Zertifikaten in der Kryptographie

LinuxBeginner
Jetzt üben

Einführung

In diesem Lab werden Sie die praktischen Aspekte der Erstellung und Verwaltung von X.509-Zertifikaten erkunden, einem Eckpfeiler der modernen digitalen Sicherheit. X.509-Zertifikate sind digitale Dokumente, die einen öffentlichen Schlüssel an eine Identität binden, wie z. B. eine Person oder einen Server, und sind grundlegend für Protokolle wie TLS/SSL zur Sicherung des Webverkehrs.

Mithilfe des leistungsstarken Befehlszeilenwerkzeugs openssl lernen Sie, wie Sie wesentliche Aufgaben der Zertifikatsverwaltung durchführen. Sie beginnen damit, die Struktur eines Zertifikats zu verstehen, erstellen dann ein selbstsigniertes Zertifikat für Entwicklungszwecke. Anschließend generieren Sie eine Zertifikatsignierungsanforderung (Certificate Signing Request, CSR) und agieren als einfache Zertifizierungsstelle (Certificate Authority, CA), um diese zu signieren und so ein vertrauenswürdiges Zertifikat innerhalb Ihres eigenen Systems zu erstellen.

Am Ende dieses Labs werden Sie ein solides, praktisches Verständnis des Zertifikatslebenszyklus erlangt haben.

Überblick über X.509-Zertifikate

In diesem Schritt behandeln wir die grundlegende Theorie hinter X.509-Zertifikaten. Hier sind keine Befehle auszuführen; dieser Abschnitt dient Ihrem Verständnis, bevor wir mit den praktischen Aufgaben beginnen.

Ein X.509-Zertifikat ist ein standardisiertes digitales Dokument, das wichtige Informationen zur Etablierung von Vertrauen enthält. Seine Hauptkomponenten umfassen:

  • Subject (Betreff): Die Identität des Zertifikatinhabers (z. B. eine Person, ein Servername wie www.example.com).
  • Issuer (Aussteller): Die Entität, die die Identität überprüft und das Zertifikat signiert hat (die Zertifizierungsstelle oder CA).
  • Public Key (Öffentlicher Schlüssel): Der öffentliche Schlüssel, der zum privaten Schlüssel des Subjekts gehört.
  • Validity Period (Gültigkeitszeitraum): Die Daten (Not Before und Not After), während derer das Zertifikat gültig ist.
  • Signature (Signatur): Die digitale Signatur des Ausstellers, die die Authentizität des Zertifikats garantiert.

Ein selbstsigniertes Zertifikat ist ein spezieller Typ von Zertifikat, bei dem der Aussteller und das Subjekt identisch sind. Im Wesentlichen signiert sich das Zertifikat selbst. Obwohl diese Zertifikate von öffentlichen Browsern oder Systemen nicht als vertrauenswürdig eingestuft werden (da sie nicht von einer bekannten CA verifiziert wurden), sind sie äußerst nützlich für interne Tests, Entwicklungsumgebungen oder private Netzwerke, in denen Sie sowohl den Client als auch den Server kontrollieren.

Im nächsten Schritt werden Sie Ihr eigenes selbstsigniertes Zertifikat erstellen.

Erstellung eines selbstsignierten Zertifikats

In diesem Schritt erstellen Sie ein selbstsigniertes Zertifikat. Um den Prozess zu vereinfachen, wurde für Sie bereits ein privater Schlüssel namens private.pem im Verzeichnis ~/project generiert. Sie werden diesen Schlüssel zur Erstellung eines Zertifikats verwenden.

Der Befehl openssl req wird zur Erstellung und Verarbeitung von Zertifikatsanforderungen verwendet. Lassen Sie uns die von uns verwendeten Optionen (Flags) aufschlüsseln:

  • -new: Erzeugt eine neue Zertifikatsanforderung.
  • -x509: Gibt anstelle einer Zertifikatsanforderung ein selbstsigniertes Zertifikat aus.
  • -key private.pem: Gibt den zu verwendenden privaten Schlüssel an.
  • -out cert.pem: Gibt den Ausgabedateinamen für das Zertifikat an.
  • -days 365: Legt die Gültigkeit des Zertifikats auf 365 Tage fest.
  • -subj "...": Liefert die Subjektinformationen nicht-interaktiv.

Führen Sie nun den folgenden Befehl in Ihrem Terminal aus, um das Zertifikat zu erstellen:

openssl req -new -x509 -key private.pem -out cert.pem -days 365 -subj "/C=US/ST=California/L=Mountain View/O=MyOrg/CN=example.com"

Dieser Befehl erzeugt keine Ausgabe, erstellt jedoch eine neue Datei. Sie können überprüfen, ob die Datei cert.pem erstellt wurde, indem Sie die Dateien im aktuellen Verzeichnis auflisten:

ls

Sie sollten cert.pem zusammen mit den bereits vorhandenen Dateien in der Ausgabe sehen.

ca-key.pem  ca.pem  cert.pem  private.pem

Zertifikatsdetails anzeigen

In diesem Schritt werden Sie den Inhalt des gerade erstellten selbstsignierten Zertifikats überprüfen. Dies ermöglicht es Ihnen, dessen Details zu verifizieren und seine Struktur in einem menschenlesbaren Format zu verstehen.

Wir verwenden den Befehl openssl x509, der für die Anzeige und Bearbeitung von Zertifikatsdateien konzipiert ist.

  • -in cert.pem: Gibt die Eingabezertifikatsdatei an.
  • -text: Gibt die vollständigen Zertifikatsdetails im Textformat aus.
  • -noout: Verhindert, dass der Befehl die kodierte Version des Zertifikats ausgibt.

Führen Sie den folgenden Befehl aus, um die Details von cert.pem anzuzeigen:

openssl x509 -in cert.pem -text -noout

Die Ausgabe wird recht lang sein, aber scrollen Sie hindurch und achten Sie auf diese Schlüsselinformationen:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            ...
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, ST = California, L = Mountain View, O = MyOrg, CN = example.com
        Validity
            Not Before: ...
            Not After : ...
        Subject: C = US, ST = California, L = Mountain View, O = MyOrg, CN = example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    ...
                Exponent: 65537 (0x10001)
...

Beachten Sie, dass die Felder Issuer (Aussteller) und Subject (Betreff) identisch sind. Dies ist das definierende Merkmal eines selbstsignierten Zertifikats.

Zertifikatsignierungsanforderung (CSR) generieren

In diesem Schritt generieren Sie eine Zertifikatsignierungsanforderung (Certificate Signing Request, CSR). Eine CSR ist ein Block kodierten Textes, der Ihren öffentlichen Schlüssel und Ihre Identitätsinformationen enthält. Sie senden eine CSR an eine Zertifizierungsstelle (Certificate Authority, CA), um ein signiertes digitales Zertifikat anzufordern.

Wir verwenden erneut den Befehl openssl req, diesmal jedoch ohne das Flag -x509, sodass er eine CSR anstelle eines selbstsignierten Zertifikats erstellt.

  • -new: Zeigt an, dass eine neue Anforderung erstellt wird.
  • -key private.pem: Verwendet Ihren vorhandenen privaten Schlüssel.
  • -out csr.pem: Gibt den Ausgabedateinamen für die CSR an.
  • -subj "...": Liefert die Identitätsinformationen für das Zertifikat, das Sie anfordern.

Führen Sie den folgenden Befehl aus, um eine CSR für eine fiktive Webanwendung zu generieren:

openssl req -new -key private.pem -out csr.pem -subj "/C=US/ST=New York/L=New York City/O=MyWebApp/CN=webapp.example.com"

Dieser Befehl erstellt eine neue Datei namens csr.pem. Sie können deren Erstellung mit dem Befehl ls überprüfen:

ls

Sie sehen nun csr.pem in Ihrem Projektverzeichnis.

ca-key.pem  ca.pem  cert.pem  csr.pem  private.pem

Diese CSR ist nun bereit, zur Signierung an eine CA gesendet zu werden.

CSR signieren

In diesem letzten Schritt agieren Sie als Zertifizierungsstelle (Certificate Authority, CA), um die im vorherigen Schritt erstellte CSR zu signieren. Zu diesem Zweck wurden in Ihrer Umgebung ein einfaches CA-Zertifikat (ca.pem) und der dazugehörige private Schlüssel (ca-key.pem) vorab generiert.

Wir verwenden den Befehl openssl x509 -req, um die CSR zu verarbeiten und ein neues Zertifikat auszustellen.

  • -req: Gibt an, dass eine CSR verarbeitet wird.
  • -in csr.pem: Die Eingabe-CSR-Datei.
  • -CA ca.pem: Das Zertifikat der CA, das zur Signierung verwendet wird.
  • -CAkey ca-key.pem: Der private Schlüssel der CA, der zur Signierung verwendet wird.
  • -out signed-cert.pem: Die Ausgabedatei für das neu signierte Zertifikat.
  • -days 365: Legt die Gültigkeitsdauer fest.
  • -CAcreateserial: Erstellt und verwaltet eine Seriennummerndatei (ca.srl), die für CAs erforderlich ist, um ausgestellte Zertifikate nachzuverfolgen.

Führen Sie den folgenden Befehl aus, um die CSR zu signieren:

openssl x509 -req -in csr.pem -CA ca.pem -CAkey ca-key.pem -out signed-cert.pem -days 365 -CAcreateserial

Sie sehen eine Ausgabe, die die erfolgreiche Signatur bestätigt:

Certificate request self-signature ok
subject=C = US, ST = New York, L = New York City, O = MyWebApp, CN = webapp.example.com

Listen Sie nun die Dateien auf, um Ihr neu erstelltes Zertifikat, signed-cert.pem, und die Seriennummerndatei, ca.srl, zu sehen.

ls
ca-key.pem  ca.pem  ca.srl  cert.pem  csr.pem  private.pem  signed-cert.pem

Sie können dieses neue Zertifikat mit openssl x509 -in signed-cert.pem -text -noout überprüfen. Sie werden feststellen, dass der Issuer (Aussteller) nun die CA ist (CN=myca.com) und der Subject (Betreff) die Identität aus Ihrer CSR ist (CN=webapp.example.com).

Zusammenfassung

In diesem Lab haben Sie praktische Erfahrungen mit dem grundlegenden Lebenszyklus von X.509-Zertifikaten mithilfe des Tools openssl gesammelt.

Sie haben erfolgreich gelernt, wie man:

  • Die Kernkomponenten eines X.509-Zertifikats und das Konzept selbstsignierter Zertifikate versteht.
  • Ein selbstsigniertes Zertifikat, das für Entwicklung und Tests geeignet ist, mithilfe von openssl req erstellt.
  • Die Details eines Zertifikats inspiziert, um dessen Inhalt mit openssl x509 zu überprüfen.
  • Eine Zertifikatsignierungsanforderung (CSR) generiert, um formell ein Zertifikat von einer CA anzufordern.
  • Als einfache Zertifizierungsstelle agiert, um eine CSR zu signieren und ein neues, gültiges Zertifikat auszustellen.

Diese Fähigkeiten sind für jeden, der in der Systemadministration, Netzwerksicherheit oder Softwareentwicklung tätig ist, unerlässlich und bilden die Grundlage für die Verwaltung sicherer Kommunikation in einer Vielzahl von Anwendungen.