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.