Estoy tratando de crear una aplicación de cliente de Kafka (tanto productor como consumidor) utilizando la instancia de Kafka administrada por AWS (MSK). Además, la comunicación de intermediario a intermediario y la comunicación de cliente a intermediario se configuran como seguras a través de TLS en el clúster. CA es AWS Private CA, ya que es la única admitida por MSK para que el cliente gestione la autenticación a través de TLS.
Contexto del problema: los pasos del documento oficial de AWS ( https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html#msk-authentication-client ) están más inclinados hacia el mundo de Java y tratan con el almacén de confianza del cliente y almacén de claves como jks. Sin embargo, el cliente .Net no usa el formato de contenedor Java JKS ( https://github.com/mhowlett/confluent-kafka-dotnet/tree/security/examples/Security ).
Cliente de autenticación del servidor: esta parte pude resolverla. Como jks es solo un almacén de datos, después de crear Keystore siguiendo el documento aws anterior, ejecuté algunos comandos adicionales de keytool y openssl para extraer el certificado y la clave del cliente de forma explícita. Pude producir y consumir mensajes con éxito usando esto.
Sin embargo, para que el cliente valide el servidor, necesito configurar ssl.ca.location en el certificado raíz de CA. De la CA privada (la que se usa como CA con la instancia de MSK) descargué la CA raíz que, de forma predeterminada, tiene formato pem (Nota: solo contenía detalles del certificado y no detalles de la clave). Lo convirtió a .crt usando los siguientes comandos:
add pem to truststore : keytool -keystore kafka.client.truststore.jks -alias CARoot -importcert -file Certificate.pem
get cert from truststore : keytool -export -alias CARoot -keystore kafka.client.truststore.jks -rfc -file ca-root.crt
el uso de ca-root.crt anterior para la ubicación de ca no parece funcionar. Lanza un error de validación del intermediario fallido. Client Machine es Windows, pero eso no debería ser un problema, ya que además de pasar la ubicación del certificado ssl.ca.location, también intenté instalar el certificado en Machine, pero aún no tuve suerte. Veo el siguiente error:
SSL handshake failed: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed: broker certificate could not be verified, verify that ssl.ca.location is correctly configured or root CA certificates are installed¿Me estoy perdiendo algo con la parte del servidor de validación del cliente?
Actualización: también pude resolver la validación del corredor. La documentación oficial de AWS anterior se basa en el certificado de Java para la autenticación de validación del agente. Lo extendí un poco para derivar permanente y más .crt de jks y usé el .crt generado como CA para ssl.ca.location y funciona. Sin embargo, hay demasiados certificados en el que se genera y no está claro cuál se utiliza para la validación del certificado de intermediario de MSK. Además, ¿por qué el certificado de CA descargado de AWS CA privado no funciona? Sería muy útil si alguien puede ayudar en estos. También sugiera si existe una solución estándar alternativa para el problema.