20 Grundlagen der PKI und Asymmetrische Verschlüsselung

20.1 Einführung in die Public Key Infrastructure

Die Public Key Infrastructure (PKI) bildet die technologische Grundlage für sichere Kommunikation und Authentifizierung in modernen IT-Systemen, einschließlich GitLab. Im Kern dieser Infrastruktur steht die asymmetrische Verschlüsselung, ein mathematisches Verfahren, das auf Schlüsselpaaren basiert.

20.1.1 Asymmetrische Verschlüsselung: Das Fundament der PKI

Im Gegensatz zur symmetrischen Verschlüsselung, bei der ein gemeinsamer Schlüssel verwendet wird, nutzt die asymmetrische Verschlüsselung zwei mathematisch miteinander verbundene Schlüssel:

Diese Schlüsselpaare ermöglichen folgende kryptografische Operationen:

  1. Verschlüsselung: Eine mit dem öffentlichen Schlüssel verschlüsselte Nachricht kann nur mit dem entsprechenden privaten Schlüssel entschlüsselt werden. Dies gewährleistet Vertraulichkeit, da nur der Inhaber des privaten Schlüssels die Nachricht lesen kann.

  2. Digitale Signatur: Eine mit dem privaten Schlüssel “signierte” Nachricht kann von jedem mit dem öffentlichen Schlüssel verifiziert werden. Dies bestätigt die Authentizität und Integrität der Nachricht, da nur der Inhaber des privaten Schlüssels die Signatur erstellen konnte.

Das asymmetrische Verschlüsselungsverfahren löst das Problem des sicheren Schlüsselaustauschs, das bei symmetrischen Verfahren besteht, und bildet damit die Basis für sichere Kommunikation über unsichere Netzwerke wie das Internet.

20.2 SSH-Authentifizierung in GitLab

20.2.1 Public-Key-Authentifizierung für Repository-Zugriff

GitLab setzt auf SSH (Secure Shell) mit Public-Key-Authentifizierung als primäre Methode für den sicheren Zugriff auf Git-Repositories. Dieser Ansatz bietet mehrere Vorteile:

20.2.2 Detaillierter Einrichtungsprozess für GitLab

Die Einrichtung des SSH-Zugangs für GitLab umfasst die folgenden Schritte:

  1. Generierung eines SSH-Schlüsselpaars: Mit folgendem Befehl wird ein neues Schlüsselpaar erstellt:

    ssh-keygen -t ed25519 -C "email@example.com"

    Oder für ältere Systeme:

    ssh-keygen -t rsa -b 4096 -C "email@example.com"

    Bei der Ausführung dieses Befehls werden Sie aufgefordert:

  2. Hinzufügen des öffentlichen Schlüssels zu GitLab:

  3. Überprüfung der SSH-Verbindung:

    ssh -T git@gitlab.example.com

    Bei erfolgreicher Konfiguration erhalten Sie eine Begrüßungsnachricht, die bestätigt, dass die Authentifizierung funktioniert.

20.3 Effiziente Verwaltung von SSH-Schlüsseln

20.3.1 Der SSH-Agent: Bequemlichkeit ohne Sicherheitseinbußen

Der SSH-Agent ist ein Hilfsprogramm, das private Schlüssel im Speicher hält und die Authentifizierung für SSH-Verbindungen übernimmt. Dies bietet mehrere Vorteile für den Entwicklungsworkflow:

Aktivierung und Nutzung des SSH-Agents:

# Starten des SSH-Agents
eval "$(ssh-agent -s)"

# Hinzufügen des Schlüssels zum Agent
ssh-add ~/.ssh/id_ed25519

Für permanente Konfiguration kann die SSH-Konfigurationsdatei (~/.ssh/config) angepasst werden:

Host gitlab.example.com
  IdentityFile ~/.ssh/id_ed25519
  AddKeysToAgent yes
  UseKeychain yes  # Nur für macOS

20.3.2 Schlüsselverwaltung in GitLab

GitLab bietet umfangreiche Funktionen zur Verwaltung von SSH-Schlüsseln:

In den GitLab-Administrationseinstellungen können globale Richtlinien für SSH-Schlüssel definiert werden, wie minimale Schlüssellängen oder erlaubte Algorithmen.

20.4 Technische Formate und Kodierung

20.4.1 PEM-Format für kryptografisches Material

Das PEM-Format (Privacy Enhanced Mail) ist ein Standard für die Speicherung und Übertragung kryptografischer Daten und wird in GitLab für SSH-Schlüssel verwendet. Ein PEM-formatierter Schlüssel hat folgende Merkmale:

20.4.2 Base64-Encoding: Brücke zwischen binären und textbasierten Systemen

Base64 ist ein Kodierungsverfahren, das für die Übertragung binärer Daten in textbasierte Kanäle entwickelt wurde. In der PKI und bei der Verwendung von SSH-Schlüsseln in GitLab spielt Base64 eine zentrale Rolle:

Der öffentliche SSH-Schlüssel, der in GitLab hochgeladen wird, liegt in Base64-kodierter Form vor und beginnt typischerweise mit dem Algorithmus-Identifier (z.B. ssh-rsa oder ssh-ed25519), gefolgt vom kodierten Schlüssel und optional einem Kommentar:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJOMx+8zkuyMsGqceXr8j8kAMgLsH8U7yz3kVRydD5sQ email@example.com

20.5 Bewährte Praktiken für SSH-Schlüssel in GitLab-Umgebungen

20.5.1 Sicherheitsmaßnahmen für private Schlüssel

Der Schutz privater SSH-Schlüssel ist für die Sicherheit Ihres GitLab-Zugangs und Ihrer Repositories von entscheidender Bedeutung:

  1. Verwendung starker Passphrasen: Schützen Sie Ihre privaten Schlüssel durch komplexe Passphrasen.
  2. Separate Schlüssel für verschiedene Zwecke: Verwenden Sie unterschiedliche Schlüssel für persönliche und berufliche Konten.
  3. Regelmäßige Schlüsselrotation: Erneuern Sie Ihre Schlüssel in regelmäßigen Abständen, insbesondere in sensiblen Umgebungen.
  4. Sichere Speicherung: Vermeiden Sie die unverschlüsselte Speicherung privater Schlüssel, insbesondere auf gemeinsam genutzten oder unsicheren Systemen.

20.5.2 Integration in CI/CD-Pipelines

In automatisierten CI/CD-Pipelines erfordert die Verwendung von SSH-Schlüsseln besondere Überlegungen:

  1. Deployment-Schlüssel: Für spezifische Repositories können in GitLab Deployment-Schlüssel konfiguriert werden, die nur Lesezugriff haben.
  2. CI/CD-Variablen: Private Schlüssel können als geschützte und maskierte Variablen in den CI/CD-Einstellungen hinterlegt werden.
  3. Deploy Keys vs. Deploy Tokens: Für unterschiedliche Anwendungsfälle bietet GitLab verschiedene Authentifizierungsmechanismen:

20.5.3 Troubleshooting häufiger SSH-Probleme

Bei Problemen mit der SSH-Authentifizierung in GitLab können folgende Schritte helfen:

  1. Überprüfung der Verbindung im Debug-Modus:

    ssh -vT git@gitlab.example.com

    Die ausführliche Ausgabe ermöglicht eine detaillierte Diagnose.

  2. Häufige Problemursachen:

  3. GitLab-spezifische Diagnose: In den GitLab-Einstellungen unter “SSH Keys” wird angezeigt, wann ein Schlüssel zuletzt verwendet wurde, was bei der Diagnose helfen kann.