Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln visar hur du konfigurerar TLS-kryptering (Transport Layer Security), som tidigare kallades SSL-kryptering (Secure Sockets Layer), mellan Apache Kafka-klienter och Apache Kafka-koordinatorer. Den visar också hur du konfigurerar autentisering av klienter (kallas ibland dubbelriktad TLS).
Viktigt!
Det finns två klienter som du kan använda för Kafka-program: en Java-klient och en konsolklient. Endast Java-klienten ProducerConsumer.java
kan använda TLS för både produktion och användning. Konsolproducentklienten console-producer.sh
fungerar inte med TLS.
Konfiguration av Apache Kafka-koordinator
Konfigurationen av Kafka TLS-koordinatorn använder fyra virtuella HDInsight-klusterdatorer på följande sätt:
- Headnode 0 – Certifikatutfärdare (CA)
- arbetsnod 0, 1 och 2 – koordinatorer
Anmärkning
Den här guiden använder självsignerade certifikat, men den säkraste lösningen är att använda certifikat som utfärdats av betrodda certifikatutfärdare.
Sammanfattningen av konfigurationsprocessen för mäklaren är följande:
Följande steg upprepas på var och en av de tre arbetsnoderna:
- Generera ett certifikat.
- Skapa en begäran om certifikatsignering.
- Skicka certifikatsigneringsbegäran till certifikatutfärdare (CA).
- Logga in på certifikatutfärdaren och signera begäran.
- SCP det signerade certifikatet tillbaka till arbetsnoden.
- SCP det offentliga certifikatet från certifikatmyndigheten till arbetsnoden.
När du har alla certifikat placerar du certifikaten i certifikatlager.
Gå till Ambari och ändra konfigurationerna.
Använd följande detaljerade instruktioner för att slutföra inställningen av mäklaren:
Viktigt!
I följande kodfragment är wnX en förkortning för en av de tre arbetsnoderna och bör ersättas med
wn0
,wn1
ellerwn2
efter behov.WorkerNode0_Name
ochHeadNode0_Name
bör ersättas med namnen på respektive datorer.Utför den första installationen på huvudnod 0, som för HDInsight fyller rollen som certifikatutfärdare (CA).
# Create a new directory 'ssl' and change into it mkdir ssl cd ssl
Utför samma inledande konfiguration på var och en av mäklarna (arbetsnoderna 0, 1 och 2).
# Create a new directory 'ssl' and change into it mkdir ssl cd ssl
På var och en av arbetsnoderna kör du följande steg med hjälp av kodfragmentet.
- Skapa ett nyckelarkiv och fyll i det med ett nytt privat certifikat.
- Skapa en begäran om certifikatsignering.
- SCP certifikatsigneringsbegäran till CA:en (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
Anmärkning
FQDN_WORKER_NODE är fullständigt kvalificerat domännamn för arbetsnoddatorn. Du kan hämta den informationen från /etc/hosts-filen i huvudnoden
Ett exempel:
wn0-espkaf.securehadooprc.onmicrosoft.com wn0-kafka2.zbxwnwsmpcsuvbjqbmespcm1zg.bx.internal.cloudapp.net
På CA-datorn kör du följande kommando för att skapa ca-cert- och ca-key-filer:
openssl req -new -newkey rsa:4096 -days 365 -x509 -subj "/CN=Kafka-Security-CA" -keyout ca-key -out ca-cert -nodes
Ändra till CA-datorn och signera alla mottagna certifikatsigneringsbegäranden:
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"
Skicka de signerade certifikaten från CA (headnode0) tillbaka till arbetsnoderna.
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
Skicka det offentliga certifikatet från certifikatutfärdaren till varje arbetsnod.
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
På varje arbetsnod lägger du till certifikatutfärdares offentliga certifikat i förtroendearkivet och nyckelarkivet. Lägg sedan till arbetsnodens eget signerade certifikat i nyckelarkivet
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
Uppdatera Kafka-konfigurationen för att använda TLS och starta om mäklarna.
Nu har du konfigurerat varje Kafka-koordinator med ett nyckelarkiv och ett förtroendearkiv och importerat rätt certifikat. Ändra sedan relaterade Kafka-konfigurationsegenskaper med Ambari och starta sedan om Kafka-koordinatorerna.
Utför följande steg för att slutföra konfigurationsändringen:
Logga in på Azure-portalen och välj ditt Azure HDInsight Apache Kafka-kluster.
Gå till Ambari-användargränssnittet genom att klicka på Ambari home under Klusterinstrumentpaneler.
Under Kafka Broker anger du lyssnaregenskapen till
PLAINTEXT://localhost:9092,SSL://localhost:9093
Under Avancerad kafka-broker anger du egenskapen security.inter.broker.protocol till
SSL
Under Anpassad kafka-broker anger du egenskapen ssl.client.auth till
required
.Anmärkning
Obs! Det här steget krävs bara om du konfigurerar autentisering och kryptering.
Här är skärmbilden som visar Ambari-konfigurationsgränssnittet med dessa ändringar.
Anmärkning
- ssl.keystore.location och ssl.truststore.location är den fullständiga sökvägen för ditt nyckelarkiv, plats för förtroendearkiv i certifikatutfärdare (hn0)
- ssl.keystore.password och ssl.truststore.password är lösenordsuppsättningen för nyckelarkivet och förtroendearkivet. I detta fall som ett exempel
MyServerPassword123
- ssl.key.password är nyckeluppsättningen för nyckelarkivet och förtroendearkivet. I det här fallet som exempel
MyServerPassword123
Så här använder du TLS 1.3 i Kafka
Lägg till följande konfigurationer i kafka-konfigurationerna i Ambari
ssl.enabled.protocols=TLSv1.3
ssl.protocol=TLSv1.3
Viktigt!
- TLS 1.3 fungerar endast med HDI 5.1 kafka-version.
- Om du använder TLS 1.3 på serversidan bör du också använda TLS 1.3-konfigurationer på klienten.
För HDI version 4.0 eller 5.0
- Om du konfigurerar autentisering och kryptering ser skärmbilden ut som
- Om du bara konfigurerar kryptering ser skärmbilden ut som
Starta om alla Kafka-brokers.
Klientkonfiguration (utan autentisering)
Om du inte behöver autentisering är sammanfattningen av stegen för att konfigurera endast TLS-kryptering:
- Logga in på CA:en (aktiv huvudnod).
- Kopiera CA-certifikatet till klientdatorn från CA-datorn (wn0).
- Logga in på klientdatorn (hn1) och navigera till
~/ssl
mappen. - Importera CA-certifikatet till förtroendearkivet.
- Importera CA-certifikatet till nyckelarkivet.
De här stegen beskrivs i följande kodfragment.
Logga in på CA-noden.
ssh sshuser@HeadNode0_Name cd ssl
Kopiera certifikatet till klientdatorn
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
Logga in på klientdatorn (väntelägeshuvudnod).
ssh sshuser@HeadNode1_Name cd ssl
Importera CA-certifikatet till förtroendearkivet.
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
Importera CA-certifikatet till nyckelarkivet.
keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
Skapa filen
client-ssl-auth.properties
på klientdatorn (hn1). Den bör ha följande rader:security.protocol=SSL ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks ssl.truststore.password=MyClientPassword123
- Så här använder du TLS 1.3 genom att lägga till följande konfigurationer i filen
client-ssl-auth.properties
ssl.enabled.protocols=TLSv1.3 ssl.protocol=TLSv1.3
- Så här använder du TLS 1.3 genom att lägga till följande konfigurationer i filen
Starta administratörsklienten med producent- och konsumentalternativ för att kontrollera att både producenter och konsumenter arbetar på port 9093. Se avsnittet Verifiering för de steg som krävs för att verifiera konfigurationen med hjälp av konsolproducent/konsument.
Klientkonfiguration (med autentisering)
Anmärkning
Följande steg krävs endast om du konfigurerar både TLS-kryptering och autentisering. Om du bara konfigurerar kryptering kan du läsa Klientkonfiguration utan autentisering.
Följande fyra steg sammanfattar de uppgifter som krävs för att slutföra klientkonfigurationen:
- Logga in på klientdatorn (väntelägeshuvudnod).
- Skapa ett Java-nyckelarkiv och hämta ett signerat certifikat för mäklaren. Kopiera sedan certifikatet till den virtuella dator där certifikatutfärdare körs.
- Växla till CA-datorn (aktiv huvudnod) för att signera klientcertifikatet.
- Gå till klientdatorn (väntelägeshuvudnod) och navigera till
~/ssl
mappen. Kopiera det signerade certifikatet till klientdatorn.
Information om varje steg ges.
Logga in på klientdatorn (väntelägeshuvudnod).
ssh sshuser@HeadNode1_Name
Ta bort alla befintliga SSL-kataloger.
rm -R ~/ssl mkdir ssl cd ssl
Skapa ett Java-nyckelarkiv och skapa en begäran om certifikatsignering.
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"
Kopiera begäran om certifikatsignering till certifikatutfärdare
scp client-cert-sign-request sshuser@HeadNode0_Name:~/ssl/client-cert-sign-request
Växla till CA-datorn (aktiv huvudnod) och signera klientcertifikatet.
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
Kopiera signerat klientcertifikat från certifikatutfärdare (aktiv huvudnod) till klientdatorn.
scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-cert
Kopiera certifikatet till klientdatorn
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
- Logga in på klientdatorn (väntelägeshuvudnod) och navigera till ssl-katalogen.
ssh sshuser@HeadNode1_Name cd ssl
Skapa klientarkiv med signerat certifikat, importera CA-certifikat till nyckelarkivet och förtroendearkivet på klientdatorn (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
Skapa en fil
client-ssl-auth.properties
på klientdatorn (hn1). Den bör ha följande rader: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
- Så här använder du TLS 1.3 genom att lägga till följande konfigurationer i filen
client-ssl-auth.properties
ssl.enabled.protocols=TLSv1.3 ssl.protocol=TLSv1.3
- Så här använder du TLS 1.3 genom att lägga till följande konfigurationer i filen
Kontroll
Kör de här stegen på klientdatorn.
Anmärkning
Om HDInsight 4.0 och Kafka 2.1 har installerats kan du använda konsolens producent/konsumenter för att verifiera konfigurationen. Annars kör du Kafka-producenten på port 9092 och skickar meddelanden till ämnet och använder sedan Kafka-konsumenten på port 9093 som använder TLS.
Kafka 2.1 eller senare
Skapa ett ämne om det inte redan finns.
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE>:2181 --create --topic topic1 --partitions 2 --replication-factor 2
Starta konsolproducenten och ange sökvägen till
client-ssl-auth.properties
som en konfigurationsfil för producenten./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
Öppna en annan ssh-anslutning till klientdatorn och starta konsolkonsumenten och ange sökvägen till
client-ssl-auth.properties
som en konfigurationsfil för konsumenten./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