首页 > 解决方案 > 如何解决安全 nifi 集群中的对等未验证异常?

问题描述

我使用组织提供的 TLS 证书设置了一个安全的 NiFi 集群。在访问 UI 时,我收到错误为“javax.net.ssl.SSLPeerUnverifiedException:未验证主机名 abc.com:证书: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 时启用点对点通信有什么我错过的吗?

标签: sslapache-nifitls1.2

解决方案


我遇到了同样的问题,并在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 工具包 1.15.2

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

  1. 将 nifi-toolkit-*.tar.gz下载到 linux 机器(让我们的 ip 机器是0.0.0.1,我们需要它,因为此 VM 将作为“certificateAuthorityHostname”)链接在此页面

    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- 我的集群中相同的虚拟机名称
    • !!!- 这是引发错误javax.net.ssl.SSLPeerUnverifiedException: Hostname <ip / dns> not verify--subjectAlternativeNames的主要原因
    • -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 复制到集群的其他虚拟机:0.0.0.20.0.0.3我的示例中

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

  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#独立的

链接


推荐阅读