Configurando o mTLS

O TLS mútuo (mTLS) é uma extensão do protocolo TLS (Transport Layer Security) padrão que garante a autenticação bidirecional, adicionando outra camada de segurança além do TLS padrão. Conclua as tarefas necessárias para configurar a autenticação mTLS para um cluster no Streaming com Apache Kafka.

  1. Gerar certificados
  2. Atualizar cluster do Kafka com certificados criados
  3. Configurar clientes Kafka

Gerando Certificados

No mTLS, tanto o cliente Kafka quanto os corretores Kafka verificam a identidade uns dos outros usando certificados digitais. O cliente e o corretor Kafka devem ter seus próprios certificados e os certificados devem ser assinados por um Certificado de Seguro (CA). Uma CA é uma entidade confiável que emite, assina e armazena certificados digitais.

O mTLS utiliza diferentes tipos de certificados digitais.

  • Certificados do cliente: emitidos para o cliente (cliente Kafka) para autenticar um cliente em um servidor (corretor Kafka) e normalmente assinados por uma CA.
  • Certificados do servidor: emitidos para o servidor (corretor Kafka) para autenticação em um cliente (cliente Kafka) e geralmente assinados por uma CA.
  • Certificados intermediários: ficam entre a CA raiz e os certificados de folha (certificados de cliente ou servidor). Certificados intermediários são emitidos por uma CA e podem emitir certificados de folha. Os certificados intermediários aumentam a segurança limitando o acesso à CA raiz.
  • Certificados raiz: são o nível mais alto de certificados na hierarquia de confiança e são usados para assinar certificados intermediários. Os certificados raiz são autoassinados. Eles estão instalados em um armazenamento de certificados confiáveis.

Por padrão, o Streaming com certificados de broker do Apache Kafka é assinado pela CA raiz pública Digicert com o nome DigiCert Global Root G2. O DigiCert é uma CA confiável e seu certificado raiz provavelmente já está incluído no armazenamento confiável padrão da maioria dos JDKs e ferramentas do cliente. Você pode usá-lo para estabelecer a conexão segura.

Este é um exemplo de criação de certificados usando uma área de armazenamento confiável personalizada que você pode usar para testar clusters. Para clusters de produção, use certificados assinados por uma CA confiável.

  1. Certifique-se de ter o openssl instalado.
    openssl version
  2. Gere uma chave privada a ser usada para o certificado raiz. O comando a seguir gera uma chave privada de 4096 bits usando o algoritmo RSA, a criptografa com o algoritmo AES-256 usando a senha especificada e a salva em um arquivo chamado rootCA.key.
    openssl genpkey -algorithm RSA -out rootCA.key -aes256 -pass pass:<yourpassword> -pkeyopt rsa_keygen_bits:4096
  3. Crie um certificado raiz autoassinado usando a chave privada gerada na etapa 2. O comando a seguir cria um novo certificado X.509 autoassinado usando a chave privada armazenada no rootCA.key. O certificado é válido por 10 anos, assinado com SHA-256, e a saída é salva em rootCA.pem.
    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem -passin pass:<yourpassword>
  4. Gere uma chave privada a ser usada para um certificado de folha. O comando a seguir gera uma chave privada de 2048 bits usando o algoritmo RSA e a salva em um arquivo chamado leaf.key.
    openssl genpkey -algorithm RSA -out leaf.key -pkeyopt rsa_keygen_bits:2048
  5. Crie uma Solicitação de Assinatura de Certificado (CSR) para um certificado de folha usando a chave privada gerada na etapa 4. O comando a seguir gera uma nova CSR usando a chave privada armazenada no leaf.key e salva a CSR em um arquivo chamado leaf.csr. Essa CSR pode ser enviada a uma Autoridade de Certificação (CA) para obter um certificado assinado.
    openssl req -new -key leaf.key -out leaf.csr
  6. Crie um certificado assinado usando a CSR gerada na etapa 5. O comando a seguir extrai o CSR de leaf.csr, o assina usando a CA raiz rootCA.pem e sua chave privada armazenada em rootCA.key e cria um certificado assinado salvo como leaf.crt. O certificado é válido por 825 dias e usa SHA-256 para sua assinatura. O comando também gera um número de série para rastrear o certificado.
    openssl x509 -req -in leaf.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out leaf.crt -days 825 -sha256 -passin pass:<yourpassword>

Atualizando o Cluster do Kafka

Atualize o cluster do Kafka com os certificados criados.

  1. Na página de lista Clusters Kafka, localize o cluster com o qual você deseja trabalhar. Se precisar de ajuda para localizar a página de lista ou o cluster, consulte Listando Clusters.
  2. No menu Ações (três pontos) do cluster, selecione Editar cluster.
  3. Na seção Definições de segurança do painel Editar cluster, informe o conteúdo do certificado.
  4. Selecione Atualizar.

Configurando Clientes Kafka

Para estabelecer conexão com um cluster do Kafka usando mTLS, depois de configurar o armazenamento confiável do Kafka, atualize o arquivo de propriedades do cliente do Kafka.

  1. Execute o comando a seguir para empacotar o certificado da folha e sua chave privada em um único arquivo chamado kafka-keystore.p12.
    openssl pkcs12 -export -in <leaf.crt> -inkey <leaf.key> -out kafka-keystore.p12 -name <kafka-key>
  2. Você será solicitado a informar uma senha para o arquivo kafka-keystore.p12. Lembre-se da senha informada conforme necessário para a próxima etapa, juntamente com o local do arquivo.
  3. Crie um arquivo client.properties com as seguintes informações:
    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. Altere as permissões para o arquivo client.properties.
    chmod 600 </path/to/client.properties>