Cybersicherheit 7 Min. Lesezeit

Ein umfassender Leitfaden für Entwickler: Konfiguration von Mutual TLS (mTLS) zwischen Microservices für Authentifizierung und Verschlüsselung

PROFSCODE Ekibi 21 Jul 2026
Paylaş:
Implementierung von Ende-zu-Ende sicherer Kommunikation mit Mutual TLS (mTLS) in Microservice-Architekturen

Einführung: Die Bedeutung sicherer Kommunikation in Microservices

Während Microservices die Skalierbarkeit und Flexibilität moderner Softwarearchitekturen verbessern, ist die Gewährleistung einer sicheren Kommunikation zwischen Diensten zu einer komplexen Herausforderung geworden. Traditionell verschlüsselt die unidirektionale TLS (Transport Layer Security) die Kommunikation vom Client zum Server und überprüft die Identität des Servers. In Microservice-Architekturen ist jedoch die gegenseitige Authentifizierung beider Parteien (Dienste, die als Client und Server agieren) grundlegend für die Implementierung von "Zero Trust"-Prinzipien und die Verhinderung potenzieller Seitenkanalangriffe.

In diesem Leitfaden lernen wir Schritt für Schritt, wie Mutual TLS (mTLS) implementiert wird, eine der effektivsten Möglichkeiten, eine gegenseitige und starke Authentifizierung mit Ende-zu-Ende verschlüsselter Kommunikation zwischen Ihren Microservices herzustellen. Unser Ziel ist es nicht nur, Daten zu verschlüsseln, sondern auch die Vertrauenswürdigkeit beider kommunizierender Dienste mathematisch zu überprüfen.

Was ist Mutual TLS (mTLS) und warum ist es für Microservices entscheidend?

Mutual TLS (mTLS) ist eine Erweiterung des Standard-TLS-Protokolls. Bei regulärem TLS beweist ein Client (z. B. ein Webbrowser) beim Verbinden mit einem Server (z. B. einer Website) dem Client nur über sein digitales Zertifikat seine Identität. Bei mTLS ist dieser Prozess bidirektional: Nachdem der Client die Identität des Servers überprüft hat, fordert der Server den Client ebenfalls auf, sein eigenes digitales Zertifikat vorzulegen und dieses zu überprüfen. Somit bestätigen sich Server und Client gegenseitig ihre Vertrauenswürdigkeit.

Die entscheidende Bedeutung von mTLS in Microservice-Architekturen lässt sich in wenigen Punkten zusammenfassen:

  • Starke Authentifizierung: Bietet einen wesentlich stärkeren Authentifizierungsmechanismus mit kryptografischen Zertifikaten anstelle einer bloßen passwort-/API-Schlüsselbasierten Authentifizierung.
  • Zero Trust Architektur: Ermöglicht die Implementierung von "Zero Trust"-Prinzipien, bei denen jedem Dienst standardmäßig nicht vertraut wird und jede Kommunikation Authentifizierung und Autorisierung erfordert.
  • Interne Netzwerksicherheit: Bietet Schutz vor Seitenkanalangriffen oder unbefugtem Dienstzugriff innerhalb des internen Netzwerks. Selbst wenn ein Angreifer Ihr Netzwerk kompromittiert, wird sein Zugriff auf mTLS-geschützte Dienste verhindert.
  • Datenintegrität und Vertraulichkeit: Garantiert Datenvertraulichkeit und -integrität durch Ende-zu-Ende-Verschlüsselung aller Inter-Service-Kommunikation.

Wie mTLS funktioniert: Schritt-für-Schritt-Kommunikationsablauf

Der mTLS-Handshake-Prozess umfasst die folgenden Schritte:

  1. Client initiiert Verbindung: Der Client sendet eine TLS-Verbindungsanfrage (Client Hello) an den Server.
  2. Server präsentiert sein Zertifikat: Der Server antwortet mit seinem digitalen Zertifikat, der Zertifikatskette und den bevorzugten Verschlüsselungssuites (Server Hello, Certificate, Server Key Exchange). In diesem Stadium sendet der Server auch eine Client-Zertifikatsanfrage (Certificate Request).
  3. Client überprüft Server: Der Client überprüft die Identität des Servers, indem er das Serverzertifikat mit seiner Liste der vertrauenswürdigen Zertifizierungsstellen (CAs) vergleicht.
  4. Client präsentiert sein Zertifikat: Der Client antwortet mit seinem eigenen digitalen Zertifikat, der Zertifikatskette und der digitalen Signatur (Certificate, Client Key Exchange, Certificate Verify).
  5. Server überprüft Client: Der Server überprüft die Identität des Clients, indem er das vom Client präsentierte Zertifikat mit seiner Liste der vertrauenswürdigen Zertifizierungsstellen (CAs) vergleicht.
  6. Sichere Kommunikation hergestellt: Nachdem beide Parteien die Identitäten des jeweils anderen erfolgreich überprüft haben, einigen sie sich auf einen verschlüsselten Sitzungsschlüssel, und die sichere Kommunikation beginnt.

Implementierungsschritte: Aufbau unserer eigenen mTLS-Infrastruktur

In diesem Abschnitt behandeln wir die praktischen Schritte von der Erstellung einer grundlegenden Zertifizierungsstelle (CA) über die Generierung von Zertifikaten für Dienste bis hin zur Konfiguration auf Nginx.

1. Erstellen einer Zertifizierungsstelle (CA)

Lassen Sie uns eine Root-CA erstellen, der alle unsere Dienste vertrauen werden. Diese CA signiert sowohl Server- als auch Client-Zertifikate.

# Einen Schlüssel für die CA generierenopenssl genrsa -aes256 -out ca.key 4096# Ein Root-Zertifikat mit dem CA-Schlüssel erstellenopenssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj "/C=TR/ST=Istanbul/L=Istanbul/O=MyCompany/OU=Security/CN=Root CA"

Diese Schritte erstellen die Dateien ca.key (den privaten Schlüssel der CA) und ca.crt (das öffentliche Zertifikat der CA). Die Datei ca.crt wird von allen Diensten als vertrauenswürdig akzeptiert.

2. Erstellen eines Server-Zertifikats

Generieren wir nun ein Zertifikat für unseren Serverdienst (z. B. ein API Gateway oder einen Microservice), der durch mTLS geschützt werden soll.

# Einen Schlüssel für den Server generierenopenssl genrsa -out server.key 2048# Eine Zertifikatsanforderung (CSR) für den Server erstellenopenssl req -new -key server.key -out server.csr -subj "/C=TR/ST=Istanbul/L=Istanbul/O=MyCompany/OU=Backend/CN=api.mycompany.com"# Die CSR mit der CA signieren und das Server-Zertifikat erstellenopenssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256 -extfile 
subjectAltName=DNS:api.mycompany.com,IP:127.0.0.1

Hier werden die Dateien server.key (der private Schlüssel des Servers) und server.crt (das von der CA signierte Zertifikat des Servers) generiert. Stellen Sie sicher, dass das Feld CN (Common Name) mit dem Domainnamen des Servers übereinstimmt. subjectAltName (SAN) ist ebenfalls wichtig.

3. Erstellen eines Client-Zertifikats

Lassen Sie uns ein Zertifikat für unseren Client-Dienst generieren, der sicher mit dem Server kommunizieren wird.

# Einen Schlüssel für den Client generierenopenssl genrsa -out client.key 2048# Eine Zertifikatsanforderung (CSR) für den Client erstellenopenssl req -new -key client.key -out client.csr -subj "/C=TR/ST=Istanbul/L=Istanbul/O=MyCompany/OU=Frontend/CN=client-service"# Die CSR mit der CA signieren und das Client-Zertifikat erstellenopenssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 -sha256

Als Ergebnis dieser Schritte werden die Dateien client.key und client.crt erhalten.

4. Nginx Server-seitige mTLS-Konfiguration

Konfigurieren wir Nginx so, dass es Zertifikate vom Client überprüft. Fügen Sie den folgenden server-Block zu Ihrer Nginx-Konfigurationsdatei hinzu:

server {    listen 443 ssl;    server_name api.mycompany.com;    ssl_certificate /etc/nginx/ssl/server.crt;    ssl_certificate_key /etc/nginx/ssl/server.key;    # CA-Zertifikat zur Überprüfung von Client-Zertifikaten    ssl_client_certificate /etc/nginx/ssl/ca.crt;    # Client-Zertifikat anfordern und überprüfen    ssl_verify_client on;    location / {        # Anfrage nach erfolgreicher Überprüfung weiterleiten        proxy_pass http://backend_service;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header X-Forwarded-Proto $scheme;    }    error_page 495 496 497 =403 /403.html;    location = /403.html {        return 403 "403 Forbidden: Client Certificate Required";    }}

In dieser Konfiguration geben wir das vertrauenswürdige CA-Zertifikat mit ssl_client_certificate an und erzwingen die Client-Zertifikatsüberprüfung mit ssl_verify_client on. Falls die Überprüfung fehlschlägt, gibt Nginx einen 400 (Bad Request) Fehler oder einen 403, je nach Konfiguration, zurück.

5. Client-seitige mTLS-Anfrage mit cURL

Senden wir eine Anfrage an unseren Nginx-Server unter Verwendung von Client-Zertifikaten:

curl --cert client.crt --key client.key --cacert ca.crt https://api.mycompany.com/secure-endpoint

In diesem Befehl:

  • --cert client.crt: Das öffentliche Zertifikat des Clients.
  • --key client.key: Der private Schlüssel des Clients.
  • --cacert ca.crt: Das CA-Zertifikat, das zur Überprüfung des Serverzertifikats verwendet werden soll.

Wenn alle Zertifikate korrekt erstellt und konfiguriert sind, ist die Anfrage erfolgreich. Andernfalls erhalten Sie einen TLS-Handshake-Fehler.

Best Practices und zusätzliche Sicherheitsmaßnahmen

  • Zertifikatsrotation: Erneuern Sie Zertifikate regelmäßig, bevor sie ablaufen. Die Verwendung automatisierter Zertifikatsverwaltungstools vereinfacht diesen Prozess.
  • CA-Sicherheit: Speichern Sie den privaten Schlüssel Ihrer Root-CA in einer extrem sicheren Umgebung und beschränken Sie den Zugriff nur auf Zertifikatsignierungsvorgänge.
  • Zertifikatsperrung: Sperren Sie kompromittierte oder nicht mehr verwendete Zertifikate mithilfe von Zertifikatsperrlisten (CRL) oder dem Online Certificate Status Protocol (OCSP).
  • Starke Verschlüsselungssuites: Aktivieren Sie auf Ihren Servern wie Nginx nur starke TLS-Verschlüsselungssuites und deaktivieren Sie schwache.
  • Zentrale Zertifikatsverwaltung: In großen Microservice-Umgebungen sollten Sie spezialisierte Lösungen (z. B. eine PKI-Infrastruktur) für die zentrale und sichere Verwaltung von Zertifikaten und privaten Schlüsseln in Betracht ziehen.

Fazit

Mutual TLS (mTLS) ist ein leistungsstarker Mechanismus, der die Sicherheit der Kommunikation zwischen Diensten in Microservice-Architekturen erheblich verbessert. Durch Befolgen der Schritte in diesem Leitfaden können Entwickler ihre eigene mTLS-Infrastruktur einrichten und Ende-zu-Ende verschlüsselte und gegenseitig authentifizierte Kommunikationskanäle erstellen, die den "Zero Trust"-Prinzipien entsprechen. Denken Sie daran, dass Sicherheit ein fortlaufender Prozess ist und regelmäßige Aufmerksamkeit für Zertifikatsverwaltung, Rotation und Sperrung entscheidend ist, um die Robustheit Ihrer Systeme zu erhalten.

Zurück zum Blog

Kommentare (0)

Noch keine Kommentare. Seien Sie der Erste!

Kommentar absenden