ssl - 如何解决安全 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 时启用点对点通信有什么我错过的吗?
解决方案
我遇到了同样的问题,并在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 工具包的方式:
将 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
取消归档
sudo tar -xvf nifi-toolkit-1.15.2-bin.tar.gz
通过长命令生成所有密钥
../security_output
- 需要在运行主命令之前创建此目录(或任何其他名称)(将所有密钥文件存储在一个地方很有用)sudo ./bin/tls-toolkit.sh standalone -h
- 这个帮助命令可以更好地理解 argsOU
- 我的集群中相同的虚拟机名称- !!!- 这是引发错误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'
生成密钥后,我归档完整目录
security_output
:sudo tar -zcvf security_output.tar.gz security_output
并将这个 tar/dir 复制到集群的其他虚拟机:
0.0.0.2
在0.0.0.3
我的示例中然后我们需要移动
keystore.jks
到附近truststore.jks
的目录nifi/conf/
nifi.properties
编辑
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=
重启 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#独立的
链接:
推荐阅读
- aframe - SteamVR 头戴式设备(如 HTC Vive)是否不再适用于 A-Frame 和 WebVR 或 WebXR?
- json - 如何在没有数组的情况下拥有多个无限对象 - Open API / Swagger
- javascript - 计算多次搜索的出现次数
- typeorm - typeorm:当使用 find* 方法时,与主实体一起加载关系意味着什么?
- asp.net - AWS ECS/Fargate 托管的 Asp.NET Web 服务中一致的定期首次机会 SocketException
- r - 在 R 环境中挣扎并评估表达式
- javascript - 对象作为 React 子级无效(找到:[object HTMLDivElement])。如果您打算渲染一组孩子,请改用数组
- regex - BiqQuery 中的 REGEXP_EXTRACT - 提取整数或带小数的数字
- gdb - 在核心文件中看不到来自 Erlang NIF 库的符号
- tinymce-4 - 小小; 表情符号不以 img 格式保存到 DB