Configuration de mTLS

Le protocole TLS mutuel (mTLS) est une extension du protocole TLS (Transport Layer Security) standard qui assure une 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 un cluster dans Streaming avec Apache Kafka.

  1. Générer des certificats
  2. Mettre à jour le cluster Kafka avec des 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 chacun à l'aide de certificats numériques. Le client et le courtier Kafka doivent posséder leurs propres certificats et ceux-ci 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 vers le 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 : ils sont situés 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 : niveau le plus élevé de certificats dans la hiérarchie de confiance et utilisés pour signer des certificats intermédiaires. Les certificats racine sont autosignés. Ils sont installés dans un magasin de certificats sécurisés.

Par défaut, les certificats de courtier Streaming with Apache Kafka sont signés par l'autorité de certification root publique Digicert portant le nom DigiCert Global Root G2. DigiCert est une autorité de certification sécurisée et son certificat racine est probablement déjà inclus dans le truststore par défaut de la plupart des JDK et des outils client. Vous pouvez l'utiliser pour établir la connexion sécurisée.

Voici un exemple de création de certificats à l'aide d'un truststore personnalisé que vous pouvez utiliser pour les clusters de test. Pour les clusters de production, utilisez des certificats signés par une autorité de certification sécurisé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 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 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 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 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 de signature de certificat dans un fichier nommé leaf.csr. Cette CSR peut être envoyée à 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 de la CSR générée à l'étape 5. La commande suivante extrait la CSR 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 valide pendant 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 du cluster Kafka

Mettez à jour le cluster Kafka avec les certificats créés.

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

Configurer des clients Kafka

Pour vous connecter à un cluster Kafka à l'aide de mTLS, après avoir configuré le truststore Kafka, vous mettez à jour le fichier de propriétés du client Kafka.

  1. Exécutez la commande suivante pour packager 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é à saisir un mot de passe pour le fichier kafka-keystore.p12. Souvenez-vous du mot de passe que vous avez saisi pour l'étape suivante, ainsi que de 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 droits d'accès pour le fichier client.properties.
    chmod 600 </path/to/client.properties>