我有一个带有3个节点的安全集群NIFI,配置了truststore.jks和keystore.jks
在我的invokeHTTP中,我为https设置了带有密钥库和信任的“StandardSSLContextService”。
当我尝试https://nifi:9443/nifi-api/controller/config
时,invokeHTTP正常工作因此,当我尝试使用invokeHTTP来获取令牌但是它失败并出现此错误:
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
感谢帮助
答案 0 :(得分:5)
可以使用 truststore 配置StandardSSLContextService
,它是一个Java KeyStore
对象,其中包含TrustedCertEntry
个对象的集合 - 每个对象都包含可信实体的公钥和证书信息。当Apache NiFi尝试通过HTTPS联系某个其他端点或服务时,它会评估收到的标识该服务的证书,并尝试验证该证书。如果端点证书未直接包含在信任库中,它将检查哪个证书签署了叶证书,并验证该证书。此过程继续向证书链继续,直到找到可信任的证书,或者没有证书。
您收到的错误消息表明链中的所有证书都无法验证。正如daggett所指出的,您可以手动将要验证的服务的证书导入自定义信任库。如果这是公共Internet上可用的服务并由通常受信任的证书颁发机构(CA)签名,您还可以将StandardSSLContextService
指向Java提供的默认列表。 cacerts
信任库是自动包含的,并且具有与现代浏览器类似的可信条目列表。它位于$JAVA_HOME/jre/lib/security/cacerts
。您可以为您的操作系统和Java版本确定$JAVA_HOME
的值。
/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/security/cacerts
(示例)changeit
(默认值)JKS