UI 未在 nifi 1.0.0 安全集群中打开
Posted
技术标签:
【中文标题】UI 未在 nifi 1.0.0 安全集群中打开【英文标题】:UI not opening in the nifi 1.0.0 secure cluster 【发布时间】:2017-02-01 05:04:00 【问题描述】:尝试按照以下链接中的说明在 nifi 1.0.0 中形成安全集群
http://bryanbende.com/development/2016/08/17/apache-nifi-1-0-0-authorization-and-multi-tenancy
我在目标文件夹中生成了密钥库和信任库文件,从 nifi-cert.pem 和 nifi-key.key 我生成了 p12 文件并将其加载到浏览器中
启动 nif 实例后,节点已连接并在它们之间交换心跳信号,并且指定的端口正在监听它们的号码,但是当我们启动 UI 时,它不在浏览器中查看
更新:
更新:
更新:
更新: 由于 org.apache.nifi.cluster.protocol.ProtocolException:响应消息类型失败的编组协议消息:CONNECTION_REQUEST 由于 java.net.SocketException:软件导致连接中止:套接字写入错误 org.apache.nifi.cluster.protocol.ProtocolException:响应消息类型失败的编组协议消息:CONNECTION_REQUEST 由于 java.net.SocketException:软件导致连接中止:套接字写入错误 在 org.apache.nifi.cluster.protocol.impl.SocketProtocolListener.dispatchRequest(SocketProtocolListener.java:176) ~[nifi-framework-cluster-protocol-1.0.0.jar:1.0.0] 在 org.apache.nifi.io.socket.SocketListener$2$1.run(SocketListener.java:136) [nifi-socket-utils-1.0.0.jar:1.0.0] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_91] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_91] 在 java.lang.Thread.run(Thread.java:745) [na:1.8.0_91]
【问题讨论】:
您是否在任何节点上的 nifi-app.log 中看到任何错误?您在浏览器窗口中看到了什么? nifi-app.log 文件中没有错误,日志文件@BryanBende 一切正常 好吧,这很可能是浏览器配置问题,是 IE 还是 Edge?您是否尝试过它所说的在高级设置中打开 TLS 的内容?如果可能的话,尝试使用其他浏览器(如 Firefox 或 Chrome)可能是一个很好的测试,只是看看它是否有效,当然使用相同的客户端证书。 我不这么认为..我已经在其中进行了必要的更改(IE)..在所有其他浏览器中也没有加载 Firefox 或 chrome UI ...原因是什么? p12 文件不是从 tls-toolkit 生成的。我是手动生成的。可能是这个原因吗?事实上,我在没有使用 tls-toolkit 包的情况下生成了密钥。在这种情况下,我也面临同样的问题 我明白了,通常当它在 Firefox 或 Chrome 中工作时,它们会提示您提供可用于给定站点的可用证书,所以如果它不这样做,那么它们之间就没有对齐客户端 p12 和 NiFi 正在使用的密钥库/信任库。不需要使用 TLS 工具包,它只是让它更容易。您是否手动创建了 CA,然后使用它为 NiFi 和单独的客户端证书创建密钥库/信任库? 【参考方案1】:您可以采取几个步骤来继续调试:
在启用 Java TLS (SSL) 调试的情况下运行 NiFi。在conf/bootstrap.conf
中添加java.arg.15=-Djavax.net.debug=ssl,handshake
行(确保15
是一个与现有参数列表不冲突的数字)。这将添加大量日志输出,但会明确记录任何 TLS 握手协商尝试。
使用 OpenSSL s_client
工具调试连接。运行以下命令将尝试使用额外的日志输出进行握手协商:$ openssl s_client -connect <host:port> -debug -state -cert <path_to_your_cert.pem> -key <path_to_your_key.pem> -CAfile <path_to_your_CA_cert.pem>
用您的服务器替换<host:port>
用您的公钥证书替换<path_to_your_cert.pem>
用你的私钥替换<path_to_your_key.pem>
用您的服务器的公钥证书或 CA 公钥证书替换 <path_to_your_CA_cert.pem>
您可以使用以下命令从 PKCS12 密钥库中提取公钥证书和私钥
提取私钥:$ openssl pkcs12 -in CN\=Andy_LoPresto_OU\=Apache_NiFi.p12 -nocerts -out client.key
提取公钥:$ openssl pkcs12 -in CN\=Andy_LoPresto_OU\=Apache_NiFi.p12 -clcerts -nokeys -out client.pem
正如@bryan-bende 上面指出的那样,您共享的浏览器屏幕截图中的错误消息似乎表明由于协议版本不兼容而无法协商 TLS 密码套件。上面的命令将输出连接的所有可用密码套件。您还可以使用CipherScan 之类的工具来明确枚举这些内容。
一个可能的问题是 Java 7 默认使用 TLS 1.0,Java 8 默认使用 TLS 1.2。您使用什么操作系统和 JRE 来托管 NiFi?
在极少数情况下,用户使用实际上不包含 RSA 密钥的密钥库部署 NiFi,并且 TLS 握手协商失败,因为“没有可用的密码套件”,而问题实际上是所有可用的密码套件需要一个 RSA 密钥(如果不加密实际的通道数据,至少要对临时密钥进行签名)。您能否验证您提供的 NiFi 密钥库是否有可用的有效(检查日期)私钥?
希望这些步骤可以帮助您诊断问题。如果您能提供更多信息,我们很乐意与您合作进一步调查。
【讨论】:
我已经使用 windows8 和 jre1.8 来托管 nifi。我已经检查并更新了我的所有密钥和证书文件,其中没有任何问题。正如您所说,我在 boostrap.conf 文件中添加了 SSL 调试属性,并通过生成的日志文件可以看到添加的一些信息,如在上面的图片中。我已经关注了这个链接link 但没有用。如果这是避免在浏览器中启动 URL 的原因 克服这个@Andy 的确切解决方案是什么 正如您在日志输出中看到的,客户端(您的 Web 浏览器)正在使用 SSLv3 请求握手,这是一个非常不安全且已弃用的协议版本。 NiFi 不支持通过此协议进行通信。您需要使用支持 TLSv1、TLSv1.1 或 TLSv1.2 的浏览器。您说您已在浏览器中启用此更改,但原始浏览器屏幕截图中的消息表明并非如此。其他浏览器,如 Chrome 和 Firefox,默认启用这些协议。在 Java 8 上,TLSv1.2 是默认设置。请使用现代浏览器重试。 我已经更新到最新的浏览器版本并重新启动了服务,但是在浏览器中启动url仍然存在问题,通过引导日志,我可以看到上面提到的信息。 @安迪 您提供的日志输出不足以全面诊断问题。您发布的摘录解释说它正在使用缓存的客户端会话,读取/写入一些数据,然后发送close_notify
信号。我了解您可能对发布完整日志犹豫不决,但如果您可以清理主机名和密钥材料并将其余部分作为 GitHub Gist 发布,那将更有帮助。
在分析日志文件时,我发现在连接到节点之前,我收到了上面更新的警告消息,这可能是阻止 URL 在浏览器中启动的原因?以上是关于UI 未在 nifi 1.0.0 安全集群中打开的主要内容,如果未能解决你的问题,请参考以下文章