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:

  1. De volgende stappen worden herhaald op elk van de drie werkknooppunten:

    1. Genereer een certificaat.
    2. Maak een aanvraag voor certificaatondertekening.
    3. Verzend de aanvraag voor certificaatondertekening naar de certificeringsinstantie (CA).
    4. Meld u aan bij de CA en onderteken de aanvraag.
    5. SCP het ondertekende certificaat terug naar het werkknooppunt.
    6. SCP het openbare certificaat van de CA naar het werkknooppunt.
  2. Zodra u alle certificaten hebt, plaatst u de certificaten in het certificaatarchief.

  3. 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 of wn2 indien van toepassing. WorkerNode0_Name en HeadNode0_Name moet worden vervangen door de namen van de respectieve machines.

  4. 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
    
  5. 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
    
  6. Voer op elk van de werkknooppunten de volgende stappen uit met behulp van het codefragment.

    1. Maak een sleutelarchief en vul deze in met een nieuw privécertificaat.
    2. Maak een aanvraag voor certificaatondertekening.
    3. 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
    

    Schermopname van uitvoer van hosts-bestanden.

  7. 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
    
  8. 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"
    
  9. 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
    
  10. 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
    
  11. 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:

  1. Meld u aan bij Azure Portal en selecteer uw Azure HDInsight Apache Kafka-cluster.

  2. Ga naar de Ambari-gebruikersinterface door te klikken op de startpagina van Ambari onder Clusterdashboards.

  3. Stel onder Kafka Broker de listeners-eigenschap in op PLAINTEXT://localhost:9092,SSL://localhost:9093

  4. Stel onder Advanced kafka-broker de eigenschap security.inter.broker.protocol in op SSL

    Kafka SSL-configuratie-eigenschappen bewerken in Ambari.

  5. 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.

    Kafka SSL-configuratie-eigenschappen bewerken in Ambari.

  6. Hier ziet u de schermopname van de ambari-configuratiegebruikersinterface met deze wijzigingen.

    Notitie

    1. ssl.keystore.location en ssl.truststore.location is het volledige pad van uw sleutelarchief, truststore-locatie in certificeringsinstantie (hn0)
    2. ssl.keystore.password en ssl.truststore.password is het wachtwoord dat is ingesteld voor de keystore en truststore. In dit geval als voorbeeld: MyServerPassword123
    3. ssl.key.password is de sleutel die is ingesteld voor het sleutelarchief en het vertrouwensarchief. In dit geval als voorbeeld: MyServerPassword123
  7. TLS 1.3 gebruiken in Kafka

    Voeg de volgende configuraties toe aan de kafka-configuraties in Ambari

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

    Belangrijk

    1. TLS 1.3 werkt alleen met HDI 5.1 kafka-versie.
    2. Als u TLS 1.3 aan de serverzijde gebruikt, moet u ook TLS 1.3-configuraties op de client gebruiken.
  8. Voor HDI-versie 4.0 of 5.0

    1. Als u verificatie en versleuteling instelt, ziet de schermopname eruit als

    De eigenschap kafka-env-sjabloon bewerken in Ambari vier.

    1. Als u alleen versleuteling instelt, ziet de schermopname er als volgt uit

    Schermopname van het bewerken van het eigenschapsveld kafka-env-sjabloon in Ambari voor alleen versleuteling.

  9. 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:

  1. Meld u aan bij de CA (actief hoofdknooppunt).
  2. Kopieer het CA-certificaat naar de clientcomputer van de CA-machine (wn0).
  3. Meld u aan bij de clientcomputer (hn1) en navigeer naar de ~/ssl map.
  4. Importeer het CA-certificaat in de truststore.
  5. Importeer het CA-certificaat in het sleutelarchief.

Deze stappen worden beschreven in de volgende codefragmenten.

  1. Meld u aan bij het CA-knooppunt.

    ssh sshuser@HeadNode0_Name
    cd ssl
    
  2. Het ca-certificaat kopiëren naar de clientcomputer

    scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
    
  3. Meld u aan bij de clientcomputer (stand-by-hoofdknooppunt).

    ssh sshuser@HeadNode1_Name
    cd ssl
    
  4. Importeer het CA-certificaat in de truststore.

    keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
  5. Importeer het CA-certificaat in het sleutelarchief.

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

  1. Meld u aan bij de clientcomputer (stand-by-hoofdknooppunt).
  2. 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.
  3. Schakel over naar de CA-machine (actief hoofdknooppunt) om het clientcertificaat te ondertekenen.
  4. 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.

  1. Meld u aan bij de clientcomputer (stand-by-hoofdknooppunt).

    ssh sshuser@HeadNode1_Name
    
  2. Verwijder een bestaande SSL-map.

    rm -R ~/ssl
    mkdir ssl
    cd ssl
    
  3. 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"
    
  4. De aanvraag voor certificaatondertekening naar de CA kopiëren

    scp client-cert-sign-request sshuser@HeadNode0_Name:~/ssl/client-cert-sign-request
    
  5. 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
    
  6. Kopieer het ondertekende clientcertificaat van de CA (actief hoofdknooppunt) naar de clientcomputer.

    scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-cert
    
  7. Het ca-certificaat kopiëren naar de clientcomputer

    scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
    
    1. Meld u aan bij de clientcomputer (stand-byhoofdknooppunt) en navigeer naar ssl-directory.
    ssh sshuser@HeadNode1_Name
    cd ssl
    
  8. 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
    
  9. 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
    
    1. 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
    

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

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

Volgende stappen