【问题标题】:APACHE NIFI invokeHTTP to get token issueAPACHE NIFI 调用HTTP 获取令牌问题
【发布时间】:2017-08-28 10:01:24
【问题描述】:

我有一个安全的集群 NIFI,有 3 个节点,配置了 truststore.jks 和 keystore.jks

在我的 invokeHTTP 中,我为 https 设置了带有密钥库和信任库的“StandardSSLContextService”。

因此,当我尝试使用 invokeHTTP 获取令牌但失败并出现此错误时:

sun.security.validator.ValidatorException: PKIX path building failed:      

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

感谢帮助

【问题讨论】:

  • 只需将来自服务器 https://auth_server 的公共证书添加到您的 truststore.jks。您可以使用浏览器导出公共证书链。并使用 keytool (java jdk) 导入 jks

标签: ssl-certificate apache-nifi


【解决方案1】:

StandardSSLContextService 可以配置一个truststore,这是一个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

【讨论】:

  • 从 chrome 导出证书并使用 keytool 生成 truststore.jks 并在 StandardSSLContextService 中为 Truststore Filename 属性添加路径。但我仍然遇到同样的错误。不知道如何解决这个问题。
  • 使用 OpenSSL 的 s_client 命令行工具确保您从远程服务获得正确的证书,并且它包含完整的证书链。确保这是导入到信任库的内容。 $ openssl s_client -connect <host:port> -debug -state -showcerts
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 2019-02-14
  • 2018-12-11
  • 1970-01-01
相关资源
最近更新 更多