Apache NiFi连接Confluent Cloud时trustAnchors参数非空错误
错误详情
从pkckg.eastus.azure.confluent.cloud/20.23返回意外错误>java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
org.apache.kafka.common.network.Selector [Consumer clientId=consumer-TestConnection-1, groupId=TestConnection] 从pkc-56d1g.eastus.a返回意外错误>java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
2022-12-09 01:01:32,078 WARN [Timer-Driven Process Thread-7] org.apache.kafka.clients.NetworkClient [Consumer clientId=consumer-TestConnection-1, groupId=TestConnection] 与节点-1(xxxx.eastus.azure.confluent.cloud/20.2)的连接>2022-12-09 01:01:32,078 WARN [Timer-Driven Process Thread-7] org.apache.kafka.clients.NetworkClient [Consumer clientId=consumer-TestConnection-1, groupId=TestConnection] Bootstrap broker pkc-56d1g.eastus.azure.confluent.cloud:9092(id: >2022-12-09 01:01:33,055 WARN [kafka-producer-network-thread | producer-4] org.apache.kafka.common.network.Selector [Producer clientId=producer-4] 从pkc-56d1g.eastus.azure.confluent.cloud/20.237.15.111返回意外错误;关闭连接>java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at java.base/sun.security.validator.PKIXValidator.(PKIXValidator.java:102)
...(省略重复栈跟踪)
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at java.base/java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:200)
...(省略重复栈跟踪)
解决方案
该错误是JVM无法找到有效信任证书库验证Confluent Cloud的SSL证书导致,按以下步骤排查修复:
确认SSL上下文服务配置
在PublishKafka关联的StandardRestrictedSSLContextService中:- 设置
Truststore Filename为NiFi所用JVM的默认信任库路径,比如/opt/nifi/jre/lib/security/cacerts(路径根据实际安装位置调整) - 填写
Truststore Password,默认值为changeit,若修改过则用对应密码 - 确保
Truststore Type设为JKS
- 设置
验证信任证书库有效性
用keytool检查信任库是否包含Confluent Cloud证书的根CA(DigiCert):keytool -list -keystore /opt/nifi/jre/lib/security/cacerts -storepass changeit | grep -i digicert若无输出,需导入DigiCert根证书到信任库:
# 下载根证书 curl -O https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem # 导入到信任库 keytool -importcert -alias digicertroot -file DigiCertGlobalRootCA.crt.pem -keystore /opt/nifi/jre/lib/security/cacerts -storepass changeit -noprompt检查文件权限
确保NiFi运行用户对信任库文件(cacerts)有读权限:chown nifi:nifi /opt/nifi/jre/lib/security/cacerts chmod 644 /opt/nifi/jre/lib/security/cacerts避免冲突配置
不要在PublishKafka的Advanced Kafka Producer/Consumer Properties中手动设置ssl.truststore.location、ssl.truststore.password等参数,这些会覆盖SSL上下文服务的配置引发冲突。
内容的提问来源于stack exchange,提问作者Pankaj Kapare

