Configurazione di mTLS

Mutual TLS (mTLS) è un'estensione del protocollo TLS (Transport Layer Security) standard che garantisce l'autenticazione a due vie, aggiungendo un altro livello di sicurezza oltre il TLS standard. Completare i task necessari per configurare l'autenticazione mTLS per un cluster in Streaming con Apache Kafka.

  1. Genera certificati
  2. Aggiornare il cluster Kafka con i certificati creati
  3. Configurare i client Kafka

Generazione dei certificati

In mTLS, sia il client Kafka che i broker Kafka si verificano reciprocamente l'identità utilizzando i certificati digitali. Sia il client Kafka che il broker devono avere i propri certificati e i certificati devono essere firmati da un'assicurazione certificato (CA). Una CA è un'entità attendibile che emette, firma e memorizza i certificati digitali.

mTLS utilizza diversi tipi di certificati digitali.

  • Certificati client: rilasciati al client (client Kafka) per autenticare un client a un server (broker Kafka) e in genere firmati da una CA.
  • Certificati server: rilasciati al server (broker Kafka) per l'autenticazione a un client (client Kafka) e in genere firmati da una CA.
  • Certificati intermedi: si trovano tra la CA radice e i certificati foglia (certificati client o server). I certificati intermedi vengono emessi da una CA e possono emettere certificati foglia. I certificati intermedi migliorano la sicurezza limitando l'accesso alla CA radice.
  • Certificati radice: sono il livello più alto di certificati nella gerarchia di trust e vengono utilizzati per firmare certificati intermedi. I certificati root sono autofirmati. Sono installati in un archivio certificati attendibile.

Per impostazione predefinita, i certificati del broker Streaming con Apache Kafka sono firmati da Digicert Public Root CA con il nome DigiCert Global Root G2. DigiCert è una CA sicura e il relativo certificato radice è probabilmente già incluso nel truststore predefinito della maggior parte dei JDK e degli strumenti client e può essere utilizzato per stabilire la connessione sicura.

Questo è un esempio di creazione di certificati utilizzando un truststore personalizzato che è possibile utilizzare per i cluster di test. Per i cluster di produzione, utilizzare i certificati firmati da una CA sicura.

  1. Verificare che sia installato openssl.
    openssl version
  2. Generare una chiave privata da utilizzare per il certificato radice. Il comando seguente genera una chiave privata a 4096 bit utilizzando l'algoritmo RSA, la cifra con l'algoritmo AES-256 utilizzando la password specificata e la salva in un file denominato rootCA.key.
    openssl genpkey -algorithm RSA -out rootCA.key -aes256 -pass pass:<yourpassword> -pkeyopt rsa_keygen_bits:4096
  3. Creare un certificato root autofirmato utilizzando la chiave privata generata nel passo 2. Il comando seguente crea un nuovo certificato X.509 autofirmato utilizzando la chiave privata memorizzata in rootCA.key. Il certificato è valido per 10 anni, firmato con SHA-256 e l'output viene salvato in rootCA.pem.
    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem -passin pass:<yourpassword>
                                
  4. Generare una chiave privata da utilizzare per un certificato foglia. Il comando seguente genera una chiave privata a 2048 bit utilizzando l'algoritmo RSA e la salva in un file denominato leaf.key.
    openssl genpkey -algorithm RSA -out leaf.key -pkeyopt rsa_keygen_bits:2048
  5. Creare una richiesta di firma certificato (CSR) per un certificato foglia utilizzando la chiave privata generata al passo 4. Il comando seguente genera una nuova richiesta di firma certificato utilizzando la chiave privata memorizzata in leaf.key e salva la richiesta di firma certificato in un file denominato leaf.csr. Questa richiesta di firma certificato può essere inviata a un'autorità di certificazione (CA) per ottenere un certificato firmato.
    openssl req -new -key leaf.key -out leaf.csr
                                
  6. Creare un certificato firmato utilizzando l'addetto al servizio clienti generato nel passo 5. Il comando seguente rimuove la richiesta di firma CSR da leaf.csr, la firma utilizzando la CA root rootCA.pem e la relativa chiave privata memorizzata in rootCA.key e crea un certificato firmato salvato come leaf.crt. Il certificato è valido per 825 giorni e utilizza SHA-256 per la sua firma. Il comando genera inoltre un numero di serie per tenere traccia del certificato.
    openssl x509 -req -in leaf.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out leaf.crt -days 825 -sha256 -passin pass:<yourpassword>
                                

Aggiornamento del cluster Kafka

Aggiornare il cluster Kafka con i certificati creati.

  1. Nella pagina della lista Cluster Kafka, individuare il cluster da utilizzare. Se è necessaria assistenza per trovare la pagina della lista o il cluster, vedere Elenca cluster.
  2. Dal menu Azioni (tre punti) per il cluster, selezionare Modifica cluster.
  3. Nella sezione Impostazioni sicurezza del pannello Modifica cluster, immettere il contenuto del certificato.
  4. Selezionare Aggiorna.

Configurazione dei client Kafka

Per connettersi a un cluster Kafka con mTLS, dopo aver impostato il truststore Kafka si aggiorna il file delle proprietà del client Kafka.

  1. Eseguire il comando seguente per raggruppare il certificato foglia e la relativa chiave privata in un singolo file denominato kafka-keystore.p12.
    openssl pkcs12 -export -in <leaf.crt> -inkey <leaf.key> -out kafka-keystore.p12 -name <kafka-key>
                                
  2. Vi viene richiesto di immettere una password per il file kafka-keystore.p12. Ricordare la password immessa come necessario per il passo successivo e la posizione del file.
  3. Creare un file client.properties con le seguenti informazioni:
    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. Modificare le autorizzazioni per il file client.properties.
    chmod 600 </path/to/client.properties>