我正在开发一个 Spring Kafka 项目,该项目使用以下库
org.springframework.kafka:spring-kafka:3.0.12
连接到 Kafka 服务器。它动态加载带有来自 Azure KeyVault 的密钥的证书,并需要使用它与 Kafka 建立 mTLS 连接。
一种方法是设置属性
ssl.keystore.location
和 ssl.truststore.location
,但这些属性需要文件系统存储的密钥库的路径,而我没有。
另一种方法是通过提供创建
ssl.engine.factory.class
和 SSLContext
的类的路径来使用属性 SSLEnginge
。这种方法的问题是它无法访问 Spring 上下文 bean,因为此类的实例是由 Kafka 库创建的。我需要使用 bean 来获取带有密钥的证书。
有没有其他解决方案可以满足要求?
Kafka 引入了以下属性来解决该问题,以便可以在应用程序启动期间加载私钥和信任存储并在 Kafka 属性中进行设置:
ssl.keystore.key=-----BEGIN PRIVATE KEY-----\n$base64Pkcs8EncodedKey\n-----END PRIVATE KEY-----
ssl.keystore.certificate.chain=-----BEGIN CERTIFICATE-----\n$base64EncodedCert\n-----END CERTIFICATE-----
ssl.keystore.type=PEM
ssl.truststore.certificates=-----BEGIN CERTIFICATE-----\n$base64EncodedCert\n-----END CERTIFICATE-----
ssl.truststore.type=PEM