提问者:小点点

使用GCP证书颁发机构服务的证书设置Kafka mTLS时出现的问题


我正在尝试使用GCP的CAS(证书颁发机构服务)签名的证书设置带有mTLS身份验证的Kafka集群。我有三个Kafka节点:一个主节点和两个工作者节点。每个节点都有一个PEM信任库,其中包含来自CAS上颁发机构的CA Root证书,以及一个包含来自CAS的签名证书和私钥的PEM密钥库。我关注这个网页进行设置。

这是主节点的< code>server.properties文件。除了< code > SSL . keystore . location 属性之外,其他节点具有类似的配置。

listeners=INTERNAL://:port,EXTERNAL://:port
advertised.listeners=INTERNAL://:port,EXTERNAL://:port
listener.security.protocol.map=INTERNAL:SSL,EXTERNAL:SSL
inter.broker.listener.name=INTERNAL
ssl.enabled.protocols=TLSv1.2
ssl.endpoint.identification.algorithm=
producer.ssl.endpoint.identification.algorithm=
consumer.ssl.endpoint.identification.algorithm=
ssl.client.auth=required
ssl.truststore.type=PEM
ssl.truststore.location=/path/ca.crt
ssl.keystore.type=PEM
ssl.key.password=<password>
ssl.keystore.location=/path/master.pem

信任库是ca.crt(根ca证书)文件,密钥库包含私钥和签名证书。没有中间证书,密钥库中的证书直接由根证书签名。

当我尝试在任何节点上启动服务器时,出现以下错误。我不知道为什么。

ERROR [KafkaServer id=0] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
org.apache.kafka.common.config.ConfigException: Invalid value javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. for configuration A client SSLEngine created with the provided settings can't connect to a server SSLEngine created with those settings.

附注:我已经尝试使用JKS和PKCS12格式的信任库和密钥库。我总是得到同样的错误。


共3个答案

匿名用户

从您分享的内容来看,您似乎没有为cert和CA创建有效的密钥库。

ssl.truststore.location=/path/ca.crt
...
ssl.keystore.location=/path/master.pem

你只是指向原始文件。您需要使用JDK的<code>keytool</code>工具创建两个有效的java密钥库,并将文件导入到每个密钥库中。根据您的证书格式,您可能需要使用openssl进行转换。

看见https://stackoverflow.com/a/11954816/50114例如。

匿名用户

您之前提到过,JKS密钥库和信任库也出现了同样的错误。根据错误消息,听起来密钥库可能不包含整个链。您能否首先尝试使用包含根证书的JKS信任库和包含私钥和整个证书链(即包含根证书)的JKS密钥库?

如果该运行给出相同的错误,则可以启用“javax.net.debug=ssl”。如果使用Kafka脚本启动broker,则可以首先导出Kafka_OPTS=javax.net/debug=ssl。broker通过尝试使用为代理间侦听器提供的密钥库和信任库进行握手来执行额外的验证。在您的案例中,验证似乎失败了。额外的调试可能有助于理解原因。

一旦代理与 JKS 一起运行,您可以根据需要切换到 PEM。

匿名用户

您的密钥库 PEM 文件是什么样的?

  1. 它是否有明确的单独部分(带有BEGIN和END)?参见https://docs.progress.com/en-US/bundle/datadirect-hybrid-data-pipeline-installation-46/page/PEM-file-format.html
  2. 您是否也可以尝试在签名证书之后在PEM文件中添加Root CA?