Configuración de mTLS

TLS mutua (mTLS) es una extensión del protocolo estándar de seguridad de capa de transporte (TLS) que garantiza la autenticación bidireccional, agregando otra capa de seguridad más allá del TLS estándar. Complete las tareas necesarias para configurar la autenticación mTLS para un cluster en Streaming con Apache Kafka.

  1. Generar certificados
  2. Actualizar cluster de Kafka con certificados creados
  3. Configurar clientes de Kafka

Generación de certificados

En mTLS, tanto el cliente de Kafka como los agentes de Kafka verifican la identidad de los demás mediante certificados digitales. Tanto el cliente como el broker de Kafka deben tener sus propios certificados y los certificados deben estar firmados por un Certificado de Seguro (CA). Una CA es una entidad de confianza que emite, firma y almacena certificados digitales.

mTLS utiliza diferentes tipos de certificados digitales.

  • Certificados de cliente: emitidos al cliente (cliente Kafka) para autenticar un cliente en un servidor (mediante Kafka) y normalmente firmados por una CA.
  • Certificados de servidor: emitidos en el servidor (intermediario de Kafka) para autenticarse en un cliente (cliente de Kafka) y normalmente firmados por una CA.
  • Certificados intermedios: se encuentran entre la CA raíz y los certificados de hoja (certificados de cliente o servidor). Una CA emite certificados intermedios y puede emitir certificados de hoja. Los certificados intermedios mejoran la seguridad al limitar el acceso a la CA raíz.
  • Certificados raíz: son el nivel más alto de certificados en la jerarquía de confianza y se utilizan para firmar certificados intermedios. Los certificados raíz se autofirman. Se instalan en un almacén de certificados de confianza.

Por defecto, Streaming con certificados de agente de Apache Kafka está firmado por la CA raíz pública de Digicert con el nombre DigiCert Global Root G2. DigiCert es una CA de confianza y su certificado raíz probablemente ya esté incluido en el almacén de confianza por defecto de la mayoría de los JDK y las herramientas de cliente, y puede utilizarlo para establecer la conexión segura.

Este es un ejemplo de creación de certificados mediante un almacén de confianza personalizado que puede utilizar para clusters de prueba. Para clusters de producción, utilice certificados firmados por una CA de confianza.

  1. Asegúrese de tener instalado openssl.
    openssl version
  2. Genere una clave privada que se utilizará para el certificado raíz. El siguiente comando genera una clave privada de 4096 bits mediante el algoritmo RSA, la cifra con el algoritmo AES-256 mediante la contraseña especificada y la guarda en un archivo denominado rootCA.key.
    openssl genpkey -algorithm RSA -out rootCA.key -aes256 -pass pass:<yourpassword> -pkeyopt rsa_keygen_bits:4096
  3. Cree un certificado raíz autofirmado mediante la clave privada generada en el paso 2. El siguiente comando crea un nuevo certificado X.509 autofirmado mediante la clave privada almacenada en rootCA.key. El certificado es válido durante 10 años, firmado con SHA-256 y la salida se guarda en rootCA.pem.
    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem -passin pass:<yourpassword>
  4. Genere una clave privada que se utilizará para un certificado de hoja. El siguiente comando genera una clave privada de 2048 bits mediante el algoritmo RSA y la guarda en un archivo denominado leaf.key.
    openssl genpkey -algorithm RSA -out leaf.key -pkeyopt rsa_keygen_bits:2048
  5. Cree una solicitud de firma de certificado (CSR) para un certificado de hoja mediante la clave privada generada en el paso 4. El siguiente comando genera una nueva CSR mediante la clave privada almacenada en leaf.key y guarda la CSR en un archivo denominado leaf.csr. Esta CSR se puede enviar a una autoridad de certificación (CA) para obtener un certificado firmado.
    openssl req -new -key leaf.key -out leaf.csr
  6. Cree un certificado firmado mediante la CSR generada en el paso 5. El siguiente comando toma la CSR de leaf.csr, la firma mediante la CA raíz rootCA.pem y su clave privada almacenada en rootCA.key y crea un certificado firmado guardado como leaf.crt. El certificado es válido durante 825 días y utiliza SHA-256 para su firma. El comando también genera un número de serie para el seguimiento del certificado.
    openssl x509 -req -in leaf.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out leaf.crt -days 825 -sha256 -passin pass:<yourpassword>

Actualización del cluster de Kafka

Actualice el cluster de Kafka con los certificados creados.

  1. En la página de lista Clusters de Kafka, busque el cluster con el que desea trabajar. Si necesita ayuda para buscar la página de lista o el cluster, consulte Listing Clusters.
  2. En el menú Acciones (tres puntos) del cluster, seleccione Editar cluster.
  3. En la sección Configuración de seguridad del panel Editar cluster, introduzca el contenido del certificado.
  4. Seleccione Actualizar.

Configuración de clientes de Kafka

Para conectarse a un cluster de Kafka mediante mTLS, después de configurar el almacén de confianza de Kafka, actualice el archivo de propiedades del cliente de Kafka.

  1. Ejecute el siguiente comando para empaquetar el certificado de hoja y su clave privada en un único archivo denominado kafka-keystore.p12.
    openssl pkcs12 -export -in <leaf.crt> -inkey <leaf.key> -out kafka-keystore.p12 -name <kafka-key>
  2. Se le solicitará que introduzca una contraseña para el archivo kafka-keystore.p12. Recuerde la contraseña que introduzca cuando la necesite para el siguiente paso junto con la ubicación del archivo.
  3. Cree un archivo client.properties con la siguiente información:
    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. Cambie los permisos para el archivo client.properties.
    chmod 600 </path/to/client.properties>