TLS/SSL-Einrichtung zwischen Backend und Streaming-Plattform
Einführung
Das folgende Beispiel beschreibt die Konfiguration von TLS/SSL zwischen dem Analytics Backend und der Streaming-Plattform (Apache Kafka).
Hinweis: Es wird empfohlen, eine sichere Konfiguration zu verwenden, wenn Sie Analytics Backend und die Streaming-Plattform in einem separaten Netzwerk installiert haben.
Diese Seite beinhaltet Folgendes:
Voraussetzungen
Für jedes bereitgestellte Element in Ihrem Streaming-Plattform-Cluster (Kafka) ist ein generierter Java-Schlüsselspeicher erforderlich. Siehe: https://www.digitalocean.com/community/tutorials/java-keytool-essentials-working-with-java-keystores
Weitere Ressourcen
Die offizielle Website von Apache Kafka hält die folgenden Informationen bereit, um die Einrichtung und Konfiguration von SSL zu erleichtern. Sie sollte als Ergänzung des in diesem Dokument beschriebenen Beispiels verwendet werden. Siehe: http://kafka.apache.org/documentation.html#security_ssl_key
Hinweis: Die folgenden Details basieren auf einem einzelnen Broker-Element der Streaming-Plattform (Kafka).
Erste Schritte
Im ersten Schritt wird die Streaming-Plattform so konfiguriert, dass Mandanten (d. h. Backend) eine Verbindung über SSL herstellen können.
Das folgende Bash-Script fasst die ersten drei Schritte zusammen, die auf der Apache Kafka-Webseite beschrieben sind.
- Generierung von TLS/SSL-Schlüssel und Zertifikat für jeden Broker der Streaming-Plattform (Kafka)
- Ein Zertifikat wird mit dem Java-Keytool generiert.
- Zwei wichtige Aspekte dieses Schrittes sind der Schlüsselspeicher (speichert das Zertifikat) und die Gültigkeit (Anzahl der Tage, wie lange das Zertifikat gültig ist, z. B. "365").
- Erstellen einer CA (Certificate Authority)
- Es handelt sich dabei um ein öffentlich-privates Schlüsselpaar und ein Zertifikat zum Signieren anderer Zertifikate.
- Signieren des Zertifikats
- Das generierte Zertifikat für den Broker der Streaming-Plattform (Kafka) mit generierter CA signieren.
Beispiel für ein Script:
#!/bin/bash
#Schritt 1
keytool -keystore server.keystore.jks -alias localhost -validity 365 -keyalg RSA -genkey
#Schritt 2
openssl req -new -x509 -keyout ca-key -out ca-cert -days 365
keytool -keystore server.truststore.jks -alias CARoot -import -file ca-cert keytool -keystore client.truststore.jks -alias CARoot -import -file ca-cert
#Schritt 3
keytool -keystore server.keystore.jks -alias localhost -certreq -file cert-file openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days 365 -CAcreateserial -passin pass:automic
keytool -keystore server.keystore.jks -alias CARoot -import -file ca-cert
keytool -keystore server.keystore.jks -alias localhost -import -file cert-signed
Einen TLS/SSL-Schlüssel und ein selbstsigniertes Zertifikat erstellen, einen CA erstellen und ein Zertifikat signieren
Die Kommandos im obigen Beispiel-Script (Schritte 1, 2 und 3) wurden separat (in einem Arbeitsverzeichnis) auf dem einzelnen Broker der Streaming-Plattform (Kafka) gestartet. Hier die Ausgabe:
Schritt 1- SSL-Schlüssel generieren
[root@vmsdlbroker01 ssl_vmsdlbroker01]# keytool -keystore server.keystore.jks -alias vmsdlbroker01 -validity 365 -keyalg RSA -genkey
Geben Sie das Passwort für den Schlüsselspeicher ein:
Neues Passwort erneut eingeben:
Wie lauten Ihr Vor- und Nachname?
[Unknown]: vmsdlbroker01
Wie lautet der Name Ihres Unternehmensbereichs?
[Unknown]:
Wie lautet der Name Ihres Unternehmens?
[Unknown]:
Wie lautet der Name Ihrer Stadt oder Ihres Standorts?
[Unknown]:
Wie lautet der Name Ihres Bundeslands oder Kantons?
[Unknown]:
Was ist der aus zwei Buchstaben bestehende Ländercode für diese Einheit?
[Unknown]:
Ist CN=vmsdlbroker01, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown richtig?[no]: yes
Geben Sie das Schlüsselpasswort für <vmsdlbroker01> ein
(EINGABETASTE, wenn es dasselbe wie das Schlüsselspeicherpasswort ist):
Schritt 2- Einen CA erstellen
[root@vmsdlbroker01 ssl_vmsdlbroker01]# openssl req -new -x509 -keyout ca-key -out ca-cert -days 365
Einen privaten 2048-Bit-RSA-Schlüssel generieren
.......................................................+++
Neuen privaten Schlüssel in 'ca-key' schreiben
Geben Sie die PEM-Passphrase ein:
Überprüfen: Geben Sie die PEM-Passphrase ein:
-----
Sie werden gerade aufgefordert, Informationen einzugeben, die in Ihre
Zertifikatanforderung eingebunden werden.
Was Sie eingeben, ist ein sogenannter Distinguished Name oder DN.
Es gibt relativ viele Felder, aber Sie können einige leer lassen
Für einige Felder wird ein Standardwert verwendet.
Wenn Sie '. ' eingeben, bleibt das Feld leer.
-----
Ländername (2-Buchstaben-Code) [XX]:
Bundesland oder Kanton (vollständiger Name) []:
Ortsbezeichnung (z. B. Stadt) [Standard Stadt]:
Unternehmensname (z. B. Firma) [Standard Company Ltd]:
Name des Unternehmensbereichs (z. B. Abteilung) []:
Allgemeiner Name (z. B. Ihr Name oder der Hostname Ihres Servers) []:vmsdlbroker01
E-Mail-Adresse []:
Schritt 3 - Das Zertifikat signieren
[root@vmsdlbroker01 ssl_vmsdlbroker01]# keytool -keystore server.truststore.jks -alias CARoot -import -file ca-cert
Geben Sie das Passwort für den Schlüsselspeicher ein:
Neues Passwort erneut eingeben:
Eigentümer: CN=vmsdlbroker01, O=Default Company Ltd, L=Default City, C=XX
Aussteller: CN=vmsdlbroker01, O=Default Company Ltd, L=Default City, C=XX
Seriennummer: e5598a57a2148d89
Gültig von: Fri Aug 04 11:41:22 CEST 2017 bis: Sat Aug 04 11:41:22 CEST 2018
Zertifikatfingerabdrücke:
MD5: 4C:3C:66:53:FC:7A:5F:34:F5:69:03:53:5B:AE:CD:51
SHA1: F6:5A:37:7A:2E:6E:7E:2F:B9:75:7E:06:A6:A4:5F:1F:0E:38:EF:CB
SHA256:8E:BF:85:DF:ED:E8:B0:18:C7:DE:9A:21:68:99:A5:E5:AE:96:0D:C8
:D3:D8:C0:68:69:BD:5F:71:6A:A3:F9:10
Name des Signatur-Algorithmus: SHA256withRSA
Version: 3
Erweiterungen:
#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 77 BC 1A 96 24 57 EF 2B 54 51 15 76 09 51 28 D3 w...$W.+TQ.v.Q(.0010: FA 7E 6E 1D..n.]
]
#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
CA:true
PathLen:2147483647
]
#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [KeyIdentifier [0000: 77 BC 1A 96 24 57 EF 2B 54 51 15 76 09 51 28 D3 w...$W.+TQ.v.Q(.
0010: FA 7E 6E 1D ..n]]
Diesem Zertifikat vertrauen? [no]: yes
Zertifikat wurde zum Schlüsselspeicher hinzugefügt
[root@vmsdlbroker01 ssl_vmsdlbroker01]# keytool -keystore server.keystore.jks -alias vmsdlbroker01 -import -file cert-signed
Geben Sie das Passwort für den Schlüsselspeicher ein:
Zertifikatantwort wurde in Schlüsselspeicher installiert
[root@vmsdlbroker01 ssl_vmsdlbroker01]#
[root@vmsdlbroker01 ssl_vmsdlbroker01]# ls -l
total 32
-rw-r--r--. 1 root root 1285 Aug 4 11:41 ca-cert
-rw-r--r--. 1 root root 17 Aug 4 11:43 ca-cert.srl
-rw-r--r--. 1 root root 1834 Aug 4 11:41 ca-key
-rw-r--r--. 1 root root 1105 Aug 4 11:43 cert-file
-rw-r--r--. 1 root root 1200 Aug 4 11:43 cert-signed
-rw-r--r--. 1 root root 970 Aug 4 11:42 client.truststore.jks
-rw-r--r--. 1 root root 4059 Aug 4 11:44 server.keystore.jks
-rw-r--r--. 1 root root 970 Aug 4 11:41 server.truststore.jks
Konfigurieren des Brokers der Streaming-Plattform (Kafka)
Um den Broker der Streaming-Plattform (Kafka) zu konfigurieren, sollte die Datei server.properties bearbeitet werden. Die Datei befindet sich im folgenden Verzeichnis:
<Automic>/External.Resources/kafka/kafka/config
Hinweis: Die Datei server.keystore.jks ist das zuvor erstellte selbstsignierte Zertifikat für diesen Broker.
listeners=PLAINTEXT://vmsdlbroker01:9092,SSL://vmsdlbroker01:9093
########################
## SSL-Konfiguration ##
########################
ssl.keystore.location=/opt/kafka/kafka/ssl vmsdlbroker01/server.keystore.jks
ssl.keystore.password=automic
ssl.key.password=automic
Konfigurieren des Mandanten (IA-Agent) der Streaming-Plattform (Kafka)
Um den Mandanten (das Backend) der Streaming-Plattform (Kafka) zu konfigurieren, sollte die Datei application.properties bearbeitet werden. Die Datei befindet sich im folgenden Verzeichnis:
<automic>/Automation.Platform/Analytics/backend
Hinweis: Die Datei keystore.jksfile sollte auf der Backend-Seite mit den gleichen Tools generiert werden.
########################
## SSL-Konfiguration ##
########################
# Durch Aktivierung der server.ssl.*-Einstellungen akzeptiert das Backend nur HTTPS-Verbindungen. Eine unsichere
# HTTP-Verbindung wird automatisch deaktiviert. Ändern Sie mit der folgenden Einstellung den Port bei Bedarf in 8443
server.port=8443
# Pfad zum Schlüsselspeicher, der das TLS/SSL-Zertifikat enthält (normalerweise eine jks.-Datei).
server.ssl.key-store=/automic/Automation.Platform/Analytics/backend/keystore.jks
# Passwort für den Zugriff auf den Schlüsselspeicher.
server.ssl.key-store-password=automic
# Passwort für den Zugriff auf den Schlüssel im Schlüsselspeicher.
server.ssl.key-password=automic
## Kafka ##
# Angabe von Kafka-Hosts
kafka.bootstrap_servers=vmsdlbroker01:9093
kafka.producer_configs.default[security.protocol] = SSL
kafka.consumer_configs.default[security.protocol] = SSL
kafka.producer_configs.default[ssl.truststore.location] = /automic/SSL/kafka/client.truststore.jks
kafka.consumer_configs.default[ssl.truststore.location] = /automic/SSL/kafka/client.truststore.jks
kafka.producer_configs.default[ssl.truststore.password] = automic
kafka.consumer_configs.default[ssl.truststore.password] = automic
# Angabe von Zookeeper-Hosts
zookeeper.bootstrap_servers=vmsdlbroker01:2181
Die Datei client.trustore.jks wird auf der Broker-Seite (vmsdlbroker01) der Streaming-Plattform (Kafka) erstellt und in das vertrauenswürdige lokale Verzeichnis (/automic/SSL) auf der Mandanten-Seite (Backend) abgelegt.
Hinweis: Der Broker und der Mandant der Streaming-Plattform sollten nun sicher kommunizieren können.