TLS-versleuteling en -verificatie instellen voor een Apache Kafka-cluster zonder ESP in Azure HDInsight
In dit artikel leest u hoe u TLS-versleuteling (Transport Layer Security), voorheen SSL-versleuteling (Secure Sockets Layer) instelt tussen Apache Kafka-clients en Apache Kafka-brokers. U ziet ook hoe u verificatie van clients instelt (ook wel tweerichtings-TLS genoemd).
Belangrijk
Er zijn twee clients die u kunt gebruiken voor Kafka-toepassingen: een Java-client en een consoleclient. Alleen de Java-client ProducerConsumer.java
kan TLS gebruiken voor zowel productie als verbruik. De consoleproducentclient console-producer.sh
werkt niet met TLS.
Installatie van Apache Kafka Broker
De installatie van de Kafka TLS-broker maakt op de volgende manier gebruik van vier HDInsight-cluster-VM's:
- headnode 0 - Certificeringsinstantie (CA)
- werkknooppunt 0, 1 en 2 - brokers
Notitie
In deze handleiding worden zelfondertekende certificaten gebruikt, maar de veiligste oplossing is het gebruik van certificaten die zijn uitgegeven door vertrouwde CA's.
De samenvatting van het broker-installatieproces is als volgt:
De volgende stappen worden herhaald op elk van de drie werkknooppunten:
- Genereer een certificaat.
- Maak een aanvraag voor certificaatondertekening.
- Verzend de aanvraag voor certificaatondertekening naar de certificeringsinstantie (CA).
- Meld u aan bij de CA en onderteken de aanvraag.
- SCP het ondertekende certificaat terug naar het werkknooppunt.
- SCP het openbare certificaat van de CA naar het werkknooppunt.
Zodra u alle certificaten hebt, plaatst u de certificaten in het certificaatarchief.
Ga naar Ambari en wijzig de configuraties.
Gebruik de volgende gedetailleerde instructies om de broker-installatie te voltooien:
Belangrijk
In de volgende codefragmenten is wnX een afkorting voor een van de drie werkknooppunten en moet worden vervangen door
wn0
,wn1
ofwn2
indien van toepassing.WorkerNode0_Name
enHeadNode0_Name
moet worden vervangen door de namen van de respectieve machines.Voer de eerste installatie uit op hoofdknooppunt 0, waarmee HDInsight de rol van de certificeringsinstantie (CA) vult.
# Create a new directory 'ssl' and change into it mkdir ssl cd ssl
Voer dezelfde eerste installatie uit op elk van de brokers (werkknooppunten 0, 1 en 2).
# Create a new directory 'ssl' and change into it mkdir ssl cd ssl
Voer op elk van de werkknooppunten de volgende stappen uit met behulp van het codefragment.
- Maak een sleutelarchief en vul deze in met een nieuw privécertificaat.
- Maak een aanvraag voor certificaatondertekening.
- SCP de aanvraag voor certificaatondertekening bij de CA (headnode0)
keytool -genkey -keystore kafka.server.keystore.jks -keyalg RSA -validity 365 -storepass "MyServerPassword123" -keypass "MyServerPassword123" -dname "CN=FQDN_WORKER_NODE" -ext SAN=DNS:FQDN_WORKER_NODE -storetype pkcs12 keytool -keystore kafka.server.keystore.jks -certreq -file cert-file -storepass "MyServerPassword123" -keypass "MyServerPassword123" scp cert-file sshuser@HeadNode0_Name:~/ssl/wnX-cert-sign-request
Notitie
FQDN_WORKER_NODE is Fully Qualified Domain Name van de werkknooppuntcomputer. U kunt die details ophalen uit het bestand /etc/hosts in het hoofdknooppunt
Voorbeeld:
wn0-espkaf.securehadooprc.onmicrosoft.com wn0-kafka2.zbxwnwsmpcsuvbjqbmespcm1zg.bx.internal.cloudapp.net
Voer op de CA-computer de volgende opdracht uit om ca-cert- en ca-key-bestanden te maken:
openssl req -new -newkey rsa:4096 -days 365 -x509 -subj "/CN=Kafka-Security-CA" -keyout ca-key -out ca-cert -nodes
Ga naar de CA-machine en onderteken alle ontvangen certificaatondertekeningsaanvragen:
openssl x509 -req -CA ca-cert -CAkey ca-key -in wn0-cert-sign-request -out wn0-cert-signed -days 365 -CAcreateserial -passin pass:"MyServerPassword123" openssl x509 -req -CA ca-cert -CAkey ca-key -in wn1-cert-sign-request -out wn1-cert-signed -days 365 -CAcreateserial -passin pass:"MyServerPassword123" openssl x509 -req -CA ca-cert -CAkey ca-key -in wn2-cert-sign-request -out wn2-cert-signed -days 365 -CAcreateserial -passin pass:"MyServerPassword123"
Verzend de ondertekende certificaten terug naar de werkknooppunten van de CA (headnode0).
scp wn0-cert-signed sshuser@WorkerNode0_Name:~/ssl/cert-signed scp wn1-cert-signed sshuser@WorkerNode1_Name:~/ssl/cert-signed scp wn2-cert-signed sshuser@WorkerNode2_Name:~/ssl/cert-signed
Verzend het openbare certificaat van de CA naar elk werkknooppunt.
scp ca-cert sshuser@WorkerNode0_Name:~/ssl/ca-cert scp ca-cert sshuser@WorkerNode1_Name:~/ssl/ca-cert scp ca-cert sshuser@WorkerNode2_Name:~/ssl/ca-cert
Voeg op elk werkknooppunt het openbare CA-certificaat toe aan de truststore en het sleutelarchief. Voeg vervolgens het eigen ondertekende certificaat van het werkknooppunt toe aan het sleutelarchief
keytool -keystore kafka.server.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyServerPassword123" -keypass "MyServerPassword123" -noprompt keytool -keystore kafka.server.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyServerPassword123" -keypass "MyServerPassword123" -noprompt keytool -keystore kafka.server.keystore.jks -import -file cert-signed -storepass "MyServerPassword123" -keypass "MyServerPassword123" -noprompt
Kafka-configuratie bijwerken om TLS te gebruiken en brokers opnieuw te starten
U hebt nu elke Kafka-broker ingesteld met een sleutelarchief en vertrouwensarchief en de juiste certificaten geïmporteerd. Wijzig vervolgens gerelateerde Kafka-configuratie-eigenschappen met Behulp van Ambari en start de Kafka-brokers opnieuw.
Voer de volgende stappen uit om de configuratiewijziging te voltooien:
Meld u aan bij Azure Portal en selecteer uw Azure HDInsight Apache Kafka-cluster.
Ga naar de Ambari-gebruikersinterface door te klikken op de startpagina van Ambari onder Clusterdashboards.
Stel onder Kafka Broker de listeners-eigenschap in op
PLAINTEXT://localhost:9092,SSL://localhost:9093
Stel onder Advanced kafka-broker de eigenschap security.inter.broker.protocol in op
SSL
Stel onder Aangepaste kafka-broker de eigenschap ssl.client.auth in op
required
.Notitie
Opmerking: deze stap is alleen vereist als u verificatie en versleuteling instelt.
Hier ziet u de schermopname van de ambari-configuratiegebruikersinterface met deze wijzigingen.
Notitie
- ssl.keystore.location en ssl.truststore.location is het volledige pad van uw sleutelarchief, truststore-locatie in certificeringsinstantie (hn0)
- ssl.keystore.password en ssl.truststore.password is het wachtwoord dat is ingesteld voor de keystore en truststore. In dit geval als voorbeeld:
MyServerPassword123
- ssl.key.password is de sleutel die is ingesteld voor het sleutelarchief en het vertrouwensarchief. In dit geval als voorbeeld:
MyServerPassword123
TLS 1.3 gebruiken in Kafka
Voeg de volgende configuraties toe aan de kafka-configuraties in Ambari
ssl.enabled.protocols=TLSv1.3
ssl.protocol=TLSv1.3
Belangrijk
- TLS 1.3 werkt alleen met HDI 5.1 kafka-versie.
- Als u TLS 1.3 aan de serverzijde gebruikt, moet u ook TLS 1.3-configuraties op de client gebruiken.
Voor HDI-versie 4.0 of 5.0
- Als u verificatie en versleuteling instelt, ziet de schermopname eruit als
- Als u alleen versleuteling instelt, ziet de schermopname er als volgt uit
Start alle Kafka-brokers opnieuw op.
Clientinstallatie (zonder verificatie)
Als u geen verificatie nodig hebt, zijn de samenvatting van de stappen voor het instellen van alleen TLS-versleuteling:
- Meld u aan bij de CA (actief hoofdknooppunt).
- Kopieer het CA-certificaat naar de clientcomputer van de CA-machine (wn0).
- Meld u aan bij de clientcomputer (hn1) en navigeer naar de
~/ssl
map. - Importeer het CA-certificaat in de truststore.
- Importeer het CA-certificaat in het sleutelarchief.
Deze stappen worden beschreven in de volgende codefragmenten.
Meld u aan bij het CA-knooppunt.
ssh sshuser@HeadNode0_Name cd ssl
Het ca-certificaat kopiëren naar de clientcomputer
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
Meld u aan bij de clientcomputer (stand-by-hoofdknooppunt).
ssh sshuser@HeadNode1_Name cd ssl
Importeer het CA-certificaat in de truststore.
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
Importeer het CA-certificaat in het sleutelarchief.
keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
Maak het bestand
client-ssl-auth.properties
op clientcomputer (hn1). De regel moet de volgende regels bevatten:security.protocol=SSL ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks ssl.truststore.password=MyClientPassword123
- Als u TLS 1.3 wilt gebruiken, voegt u de volgende configuraties toe aan het bestand
client-ssl-auth.properties
ssl.enabled.protocols=TLSv1.3 ssl.protocol=TLSv1.3
- Als u TLS 1.3 wilt gebruiken, voegt u de volgende configuraties toe aan het bestand
Start de beheerdersclient met opties voor producenten en consumenten om te controleren of zowel producenten als consumenten aan poort 9093 werken. Raadpleeg de sectie Verificatie voor stappen die nodig zijn om de installatie te controleren met behulp van consoleproducent/consument.
Clientinstallatie (met verificatie)
Notitie
De volgende stappen zijn alleen vereist als u zowel TLS-versleuteling als verificatie instelt. Als u alleen versleuteling instelt, raadpleegt u Clientinstellingen zonder verificatie.
In de volgende vier stappen worden de taken samengevat die nodig zijn om de clientinstallatie te voltooien:
- Meld u aan bij de clientcomputer (stand-by-hoofdknooppunt).
- Maak een Java-sleutelarchief en haal een ondertekend certificaat op voor de broker. Kopieer vervolgens het certificaat naar de VM waarop de CA wordt uitgevoerd.
- Schakel over naar de CA-machine (actief hoofdknooppunt) om het clientcertificaat te ondertekenen.
- Ga naar de clientcomputer (stand-byhoofdknooppunt) en navigeer naar de
~/ssl
map. Kopieer het ondertekende certificaat naar de clientcomputer.
De details van elke stap worden gegeven.
Meld u aan bij de clientcomputer (stand-by-hoofdknooppunt).
ssh sshuser@HeadNode1_Name
Verwijder een bestaande SSL-map.
rm -R ~/ssl mkdir ssl cd ssl
Maak een Java-sleutelarchief en maak een aanvraag voor certificaatondertekening.
keytool -genkey -keystore kafka.client.keystore.jks -validity 365 -storepass "MyClientPassword123" -keypass "MyClientPassword123" -dname "CN=HEADNODE1_FQDN" -storetype pkcs12 keytool -keystore kafka.client.keystore.jks -certreq -file client-cert-sign-request -storepass "MyClientPassword123" -keypass "MyClientPassword123"
De aanvraag voor certificaatondertekening naar de CA kopiëren
scp client-cert-sign-request sshuser@HeadNode0_Name:~/ssl/client-cert-sign-request
Schakel over naar de CA-machine (actief hoofdknooppunt) en onderteken het clientcertificaat.
ssh sshuser@HeadNode0_Name cd ssl openssl x509 -req -CA ca-cert -CAkey ca-key -in ~/ssl/client-cert-sign-request -out ~/ssl/client-cert-signed -days 365 -CAcreateserial -passin pass:MyClientPassword123
Kopieer het ondertekende clientcertificaat van de CA (actief hoofdknooppunt) naar de clientcomputer.
scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-cert
Het ca-certificaat kopiëren naar de clientcomputer
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
- Meld u aan bij de clientcomputer (stand-byhoofdknooppunt) en navigeer naar ssl-directory.
ssh sshuser@HeadNode1_Name cd ssl
Maak een clientarchief met ondertekend certificaat, importeer CA-certificaat in het sleutelarchief en truststore op clientcomputer (hn1):
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt keytool -keystore kafka.client.keystore.jks -import -file client-signed-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
Maak een bestand
client-ssl-auth.properties
op clientcomputer (hn1). De regel moet de volgende regels bevatten:security.protocol=SSL ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks ssl.truststore.password=MyClientPassword123 ssl.keystore.location=/home/sshuser/ssl/kafka.client.keystore.jks ssl.keystore.password=MyClientPassword123 ssl.key.password=MyClientPassword123
- Als u TLS 1.3 wilt gebruiken, voegt u de volgende configuraties toe aan het bestand
client-ssl-auth.properties
ssl.enabled.protocols=TLSv1.3 ssl.protocol=TLSv1.3
- Als u TLS 1.3 wilt gebruiken, voegt u de volgende configuraties toe aan het bestand
Verificatie
Voer deze stappen uit op de clientcomputer.
Notitie
Als HDInsight 4.0 en Kafka 2.1 is geïnstalleerd, kunt u de consoleproducent/consumenten gebruiken om uw installatie te controleren. Als dat niet het geval is, voert u de Kafka-producent uit op poort 9092 en verzendt u berichten naar het onderwerp en gebruikt u vervolgens de Kafka-consument op poort 9093 die gebruikmaakt van TLS.
Kafka 2.1 of hoger
Maak een onderwerp als dit nog niet bestaat.
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE>:2181 --create --topic topic1 --partitions 2 --replication-factor 2
Start de consoleproducent en geef het pad op naar
client-ssl-auth.properties
als een configuratiebestand voor de producent./usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list <FQDN_WORKER_NODE>:9093 --topic topic1 --producer.config ~/ssl/client-ssl-auth.properties
Open een andere ssh-verbinding met de clientcomputer en start de consolegebruiker en geef het pad op naar
client-ssl-auth.properties
als een configuratiebestand voor de consument./usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --bootstrap-server <FQDN_WORKER_NODE>:9093 --topic topic1 --consumer.config ~/ssl/client-ssl-auth.properties --from-beginning