Configuration de mTLS

Mutual TLS (mTLS) est une extension du protocole TLS (Transport Layer Security) standard qui assure l'authentification bidirectionnelle, ajoutant une autre couche de sécurité au-delà du protocole TLS standard. Effectuez les tâches nécessaires pour configurer l'authentification mTLS pour une grappe dans le service de diffusion en continu avec Apache Kafka.

  1. Créer des certificats
  2. Mettre à jour la grappe Kafka avec les certificats créés
  3. Configurer les clients Kafka

Génération de certificats

Dans mTLS, le client Kafka et les courtiers Kafka vérifient l'identité de l'autre à l'aide de certificats numériques. Le client et le courtier Kafka doivent avoir leurs propres certificats et les certificats doivent être signés par une assurance certificat (CA). Une autorité de certification est une entité de confiance qui émet, signe et stocke des certificats numériques.

mTLS utilise différents types de certificats numériques.

  • Certificats client : émis au client (client Kafka) pour authentifier un client sur un serveur (courtier Kafka) et généralement signé par une autorité de certification.
  • Certificats de serveur : émis au serveur (courtier Kafka) pour s'authentifier auprès d'un client (client Kafka) et généralement signé par une autorité de certification.
  • Certificats intermédiaires : situer entre l'autorité de certification racine et les certificats feuille (certificats client ou serveur). Les certificats intermédiaires sont émis par une autorité de certification et peuvent émettre des certificats feuille. Les certificats intermédiaires améliorent la sécurité en limitant l'accès à l'autorité de certification racine.
  • Certificats racine : le niveau le plus élevé de certificats dans la hiérarchie d'approbation et sont utilisés pour signer des certificats intermédiaires. Les certificats racines sont auto-signés. Ils sont installés dans un magasin de certificats sécurisé.

Par défaut, le service de diffusion en continu avec les certificats de courtier Apache Kafka est signé par l'autorité de certification racine publique Digicert avec le nom DigiCert Global Root G2. DigiCert est une autorité de certification approuvée et son certificat racine est probablement déjà inclus dans le magasin de certificats par défaut de la plupart des outils JDK et clients. Vous pouvez l'utiliser pour établir la connexion sécurisée.

Il s'agit d'un exemple de création de certificats à l'aide d'un magasin de certificats personnalisés que vous pouvez utiliser pour tester les grappes. Pour les grappes de production, utilisez des certificats signés par une autorité de certification approuvée.

  1. Assurez-vous que openssl est installé.
    openssl version
  2. Générez une clé privée à utiliser pour le certificat racine. La commande suivante génère une clé privée de 4096 bits à l'aide de l'algorithme RSA, la chiffre avec l'algorithme AES-256 à l'aide du mot de passe spécifié et l'enregistre dans un fichier nommé rootCA.key.
    openssl genpkey -algorithm RSA -out rootCA.key -aes256 -pass pass:<yourpassword> -pkeyopt rsa_keygen_bits:4096
  3. Créez un certificat racine auto-signé à l'aide de la clé privée générée à l'étape 2. La commande suivante crée un nouveau certificat X.509 auto-signé à l'aide de la clé privée stockée dans rootCA.key. Le certificat est valide pendant 10 ans, signé avec SHA-256 et la sortie est enregistrée dans rootCA.pem.
    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem -passin pass:<yourpassword>
                                
  4. Générez une clé privée à utiliser pour un certificat feuille. La commande suivante génère une clé privée de 2048 bits à l'aide de l'algorithme RSA et l'enregistre dans un fichier nommé leaf.key.
    openssl genpkey -algorithm RSA -out leaf.key -pkeyopt rsa_keygen_bits:2048
  5. Créez une demande de signature de certificat (CSR) pour un certificat feuille à l'aide de la clé privée générée à l'étape 4. La commande suivante génère une nouvelle demande de signature de certificat à l'aide de la clé privée stockée dans leaf.key et enregistre la demande dans un fichier nommé leaf.csr. Ce CSR peut être envoyé à une autorité de certification pour obtenir un certificat signé.
    openssl req -new -key leaf.key -out leaf.csr
                                
  6. Créez un certificat signé à l'aide du CSR généré à l'étape 5. La commande suivante prend la demande de signature de certificat à partir de leaf.csr, la signe à l'aide de l'autorité de certification racine rootCA.pem et de sa clé privée stockée dans rootCA.key, et crée un certificat signé enregistré en tant que leaf.crt. Le certificat est valable 825 jours et utilise SHA-256 pour sa signature. La commande génère également un numéro de série pour le suivi du certificat.
    openssl x509 -req -in leaf.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out leaf.crt -days 825 -sha256 -passin pass:<yourpassword>
                                

Mise à jour de la grappe Kafka

Mettez à jour la grappe Kafka avec les certificats créés.

  1. Dans la page de liste Grappes Kafka, recherchez la grappe avec laquelle vous voulez travailler. Si vous avez besoin d'aide pour trouver la page de liste ou la grappe, voir Liste des grappes.
  2. Dans le menu Actions (trois points) de la grappe, sélectionnez Modifier la grappe.
  3. Dans la section Paramètres de sécurité du panneau Modifier la grappe, entrez le contenu du certificat.
  4. Sélectionnez Mettre à jour.

Configuration des clients Kafka

Pour vous connecter à une grappe Kafka à l'aide de mTLS, après avoir configuré le magasin de certificats SSL Kafka, vous mettez à jour le fichier de propriétés du client Kafka.

  1. Exécutez la commande suivante pour emballer le certificat feuille et sa clé privée dans un fichier unique nommé kafka-keystore.p12.
    openssl pkcs12 -export -in <leaf.crt> -inkey <leaf.key> -out kafka-keystore.p12 -name <kafka-key>
                                
  2. Vous êtes invité à entrer un mot de passe pour le fichier kafka-keystore.p12. N'oubliez pas le mot de passe que vous entrez comme vous en avez besoin pour l'étape suivante, ainsi que l'emplacement du fichier.
  3. Créez un fichier client.properties avec les informations suivantes :
    security.protocol=SSL
    ssl.certificate.location=<path/to/leaf.cert>
    ssl.key.location=<path/to/leaf.key>
    ssl.keystore.password=<password-created-in-previous-step>
    ssl.keystore.location=<path/to/kafka-keystore.p12>
                                
  4. Modifiez les autorisations pour le fichier client.properties.
    chmod 600 </path/to/client.properties>