Dela via


Konfigurera TLS-kryptering och autentisering för Apache Kafka-kluster som inte är ESP i Azure HDInsight

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

Kommentar

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 koordinatorn är följande:

  1. Följande steg upprepas på var och en av de tre arbetsnoderna:

    1. Generera ett certifikat.
    2. Skapa en begäran om certifikatsignering.
    3. Skicka certifikatsigneringsbegäran till certifikatutfärdare (CA).
    4. Logga in på certifikatutfärdaradressen och signera begäran.
    5. SCP det signerade certifikatet tillbaka till arbetsnoden.
    6. SCP det offentliga certifikatet för certifikatutfärdare till arbetsnoden.
  2. När du har alla certifikat placerar du certifikaten i certifikatarkivet.

  3. Gå till Ambari och ändra konfigurationerna.

    Använd följande detaljerade instruktioner för att slutföra konfigurationen av asynkrona meddelandeköer:

    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 eller wn2 efter behov. WorkerNode0_Name och HeadNode0_Name bör ersättas med namnen på respektive datorer.

  4. 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
    
  5. Utför samma inledande konfiguration på var och en av asynkrona koordinatorerna (arbetsnoderna 0, 1 och 2).

    # Create a new directory 'ssl' and change into it
    mkdir ssl
    cd ssl
    
  6. På var och en av arbetsnoderna kör du följande steg med hjälp av kodfragmentet.

    1. Skapa ett nyckelarkiv och fyll i det med ett nytt privat certifikat.
    2. Skapa en begäran om certifikatsignering.
    3. 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
    

    Kommentar

    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

    Exempel:

    wn0-espkaf.securehadooprc.onmicrosoft.com
    wn0-kafka2.zbxwnwsmpcsuvbjqbmespcm1zg.bx.internal.cloudapp.net
    

    Skärmbild som visar värdfilutdata.

  7. 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
    
  8. Ä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"
    
  9. Skicka tillbaka de signerade certifikaten till arbetsnoderna från CA:en (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
    
  10. Skicka certifikatutfärdarcertifikatutfärdarcertifikatet 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
    
  11. 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 asynkrona meddelandeköer

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:

  1. Logga in på Azure-portalen och välj ditt Azure HDInsight Apache Kafka-kluster.

  2. Gå till Ambari-användargränssnittet genom att klicka på Ambari home under Klusterinstrumentpaneler.

  3. Under Kafka Broker anger du lyssnaregenskapen tillPLAINTEXT://localhost:9092,SSL://localhost:9093

  4. Under Avancerad kafka-broker anger du egenskapen security.inter.broker.protocol till SSL

    Redigera kafka ssl-konfigurationsegenskaper i Ambari.

  5. Under Anpassad kafka-broker anger du egenskapen ssl.client.auth till required.

    Kommentar

    Obs! Det här steget krävs bara om du konfigurerar autentisering och kryptering.

    Redigera kafka ssl-konfigurationsegenskaper i Ambari.

  6. Här är skärmbilden som visar Ambari-konfigurationsgränssnittet med dessa ändringar.

    Kommentar

    1. 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)
    2. ssl.keystore.password och ssl.truststore.password är lösenordsuppsättningen för nyckelarkivet och förtroendearkivet. I det här fallet kan du till exempel MyServerPassword123
    3. ssl.key.password är nyckeluppsättningen för nyckelarkivet och förtroendearkivet. I det här fallet kan du till exempel MyServerPassword123
  7. Så här använder du TLS 1.3 i Kafka

    Lägg till följande konfigurationer i kafka-konfigurationerna i Ambari

    1. ssl.enabled.protocols=TLSv1.3
    2. ssl.protocol=TLSv1.3

    Viktigt!

    1. TLS 1.3 fungerar endast med HDI 5.1 kafka-version.
    2. Om du använder TLS 1.3 på serversidan bör du också använda TLS 1.3-konfigurationer på klienten.
  8. För HDI version 4.0 eller 5.0

    1. Om du konfigurerar autentisering och kryptering ser skärmbilden ut som

    Redigerar mallegenskapen kafka-env i Ambari fyra.

    1. Om du bara konfigurerar kryptering ser skärmbilden ut som

    Skärmbild som visar hur du redigerar egenskapsfältet kafka-env-mall i Ambari för endast kryptering.

  9. Starta om alla Kafka-asynkrona asynkrona meddelandeköer.

Klientkonfiguration (utan autentisering)

Om du inte behöver autentisering är sammanfattningen av stegen för att konfigurera endast TLS-kryptering:

  1. Logga in på CA:en (aktiv huvudnod).
  2. Kopiera CA-certifikatet till klientdatorn från CA-datorn (wn0).
  3. Logga in på klientdatorn (hn1) och navigera till ~/ssl mappen.
  4. Importera CA-certifikatet till förtroendearkivet.
  5. Importera CA-certifikatet till nyckelarkivet.

De här stegen beskrivs i följande kodfragment.

  1. Logga in på CA-noden.

    ssh sshuser@HeadNode0_Name
    cd ssl
    
  2. Kopiera certifikatet till klientdatorn

    scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
    
  3. Logga in på klientdatorn (väntelägeshuvudnod).

    ssh sshuser@HeadNode1_Name
    cd ssl
    
  4. Importera CA-certifikatet till förtroendearkivet.

    keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
  5. Importera CA-certifikatet till nyckelarkivet.

    keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
  6. 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
    
    1. 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
    
  7. 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)

Kommentar

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:

  1. Logga in på klientdatorn (väntelägeshuvudnod).
  2. Skapa ett Java-nyckelarkiv och hämta ett signerat certifikat för asynkron meddelandekö. Kopiera sedan certifikatet till den virtuella dator där certifikatutfärdare körs.
  3. Växla till CA-datorn (aktiv huvudnod) för att signera klientcertifikatet.
  4. Gå till klientdatorn (väntelägeshuvudnod) och navigera till ~/ssl mappen. Kopiera det signerade certifikatet till klientdatorn.

Information om varje steg ges.

  1. Logga in på klientdatorn (väntelägeshuvudnod).

    ssh sshuser@HeadNode1_Name
    
  2. Ta bort alla befintliga SSL-kataloger.

    rm -R ~/ssl
    mkdir ssl
    cd ssl
    
  3. 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"
    
  4. Kopiera begäran om certifikatsignering till certifikatutfärdare

    scp client-cert-sign-request sshuser@HeadNode0_Name:~/ssl/client-cert-sign-request
    
  5. 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
    
  6. Kopiera signerat klientcertifikat från certifikatutfärdare (aktiv huvudnod) till klientdatorn.

    scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-cert
    
  7. Kopiera certifikatet till klientdatorn

    scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
    
    1. Logga in på klientdatorn (väntelägeshuvudnod) och navigera till ssl-katalogen.
    ssh sshuser@HeadNode1_Name
    cd ssl
    
  8. 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
    
  9. 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
    
    1. 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
    

Verifiering

Kör de här stegen på klientdatorn.

Kommentar

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

  1. 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
    
  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
    
  3. Ö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
    

Nästa steg