【问题标题】:How to resolve peer unverified exception in a secure nifi cluster?如何解决安全 nifi 集群中的对等未验证异常?
【发布时间】:2021-03-23 12:10:16
【问题描述】:

我使用组织提供的 TLS 证书设置了一个安全的 NiFi 集群。在访问 UI 时,我收到错误消息“javax.net.ssl.SSLPeerUnverifiedException: Hostname abc.com not verify: certificate: sha256/abc/ abcabc= DN: CN=abc.com, OU=Abc Operations, O=Abc Corporation Limited, C=SG subjectAltNames: [abc.com]"。我参考了链接https://nifi.apache.org/docs/nifi-docs/html/walkthroughs.html#securing-nifi-with-provided-certificates。 在使用 SSL 时启用点对点通信有什么遗漏的吗?

【问题讨论】:

  • 服务器证书的主题备用名称是否与您用于访问 NiFi UI 的主机名匹配? DN 或 alt 名称中是否使用了任何通配符?您使用的是什么版本的 NiFi 和什么版本的 Java?
  • NiFi 版本-1.12.1 java 版本-1.8.0_271。证书中给出的主题备用名称是主机名。我正在尝试使用 ipaddress 访问 NiFi UI。 DN 或 alt 名称中未使用通配符。
  • 如果 IP 地址不在证书 SAN 中,那么您可能无法使用该 IP 访问它。使用主机名时 UI 是否正常工作?
  • 当我设置一个独立的 NiFi 实例时,它可以工作,我可以访问提供 ip 的 UI。当我设置两个节点 NiFi 集群时会出现此问题。 Nifi 在 AWS ec2 实例上运行。这个问题似乎一个节点的证书无法被另一个节点验证。 ec2上节点之间的证书传输是否有任何限制。
  • 只要两个证书的 CA 都在两个节点的信任库中,应该没问题。 nifi.properties 值 nifi.cluster.node.address 是 IP 地址还是主机名?这可能还需要与证书的 SAN 匹配(它应该是节点的主机名)。

标签: ssl apache-nifi tls1.2


【解决方案1】:

我遇到了同样的问题,并在 NiFi TLS-toolkit 中找到了解决方案。

概念:在我的集群上,身份验证工作正常,问题仅在 java 验证 SSL

很快--subjectAlternativeNames确实有问题

用自己的 rootCA 生成 ssl 密钥对我不起作用。良好的指导(但旧):https://community.cloudera.com/t5/Community-Articles/How-to-create-user-generated-keys-for-securing-NiFi/ta-p/245551

  • CentOS Linux 8
  • NiFi 1.14.0
  • nifi-toolkit 1.15.2

我使用 NiFi TLS 工具包的方式:

  1. 下载nifi-toolkit-*.tar.gz到linux机器(我们的ip机器是0.0.0.1,我们需要它,因为这个VM将作为“certificateAuthorityHostname”)链接at this page

    sudo wget https://dlcdn.apache.org/nifi/1.15.2/nifi-toolkit-1.15.2-bin.tar.gz

  2. 取消存档

    sudo tar -xvf nifi-toolkit-1.15.2-bin.tar.gz

  3. 通过长命令生成所有密钥

    • ../security_output - 在运行主命令之前需要创建这个目录(或任何其他名称)(将所有密钥文件存储在一个地方很有用)
    • sudo ./bin/tls-toolkit.sh standalone -h - 这个帮助命令可以更好地理解 args
    • OU - 我的集群中的虚拟机名称相同
    • !!! --subjectAlternativeNames - 这是引发错误 javax.net.ssl.SSLPeerUnverifiedException: Hostname not verify 的主要原因
    • -O - 这个参数会覆盖你在文件夹中的密钥,小心
    • 通用指令:sudo ./bin/tls-toolkit.sh standalone --hostnames '0.0.0.1,0.0.0.2,0.0.0.3' -c '0.0.0.1' -C 'CN=0.0.0.1,OU=nifi-prod-cluster-01' -C 'CN=0.0.0.2,OU=nifi-prod-cluster-02' -C 'CN=0.0.0.3,OU=nifi-prod-cluster-03' -O -o ../security_output --subjectAlternativeNames '0.0.0.1,0.0.0.2,0.0.0.3,nifi-prod-cluster-01,nifi-prod-cluster-02,nifi-prod-cluster-03'
  4. 生成密钥后,我归档完整目录security_output

    sudo tar -zcvf security_output.tar.gz security_output

  5. 并将此 tar/dir 复制到集群的其他 VM:在我的示例中复制到 0.0.0.20.0.0.3

  6. 然后我们需要将keystore.jkstruststore.jks移动到nifi.properties附近的nifi/conf/目录

  7. 编辑nifi.properties。密钥的密码将在security_output/0.0.0.X/nifi.properties 中。我只替换这个参数:

    nifi.security.autoreload.enabled=false
    nifi.security.autoreload.interval=10 secs
    nifi.security.keystore=./conf/keystore.jks
    nifi.security.keystoreType=jks
    nifi.security.keystorePasswd=34dgsOBKdS+9DGHIm849ALK3JaNBdd738ddsgjfghb4J
    nifi.security.keyPasswd=34dgsOBKdS+9DGHIm849ALK3Jaddsgjfghb4J
    nifi.security.truststore=./conf/truststore.jks
    nifi.security.truststoreType=jks
    nifi.security.truststorePasswd=/n1xI9AjcwutNBdd738uOQeQL5O9ALK3i3KwylEYMW5
    nifi.security.user.authorizer=single-user-authorizer
    nifi.security.allow.anonymous.authentication=false
    nifi.security.user.login.identity.provider=single-user-provider
    nifi.security.user.jws.key.rotation.period=PT1H
    nifi.security.ocsp.responder.url=
    nifi.security.ocsp.responder.certificate=
    
  8. 重启nifi:

    sudo service nifi restart && tail -f /opt/nifi/logs/nifi-app.log

UPD。也许您想为所有机器的密钥设置一个密码(设置更容易)或为密钥设置天数:https://nifi.apache.org/docs/nifi-docs/html/toolkit-guide.html#standalone

链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    相关资源
    最近更新 更多