2

我在 docker 中有一个安全的Nifi-Registry 实例。我可以访问它的 UI,但我无法通过 NiFi 实例访问它。在注册表客户端部分添加注册表 URL 并尝试访问其存储桶后,我看到此错误:

Unable to obtain listing of buckets: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names matching IP address 172.17.0.5 found

172.17.0.5 是 docker 网络中的 Nifi-Registry ip 地址。

我使用此 DN 添加了一个对 Nifi-Registry 具有完全权限的用户:CN=localhost, OU=nifi如本教程中所述: 设置安全的 Apache NiFi 注册表

这是我用来运行容器的命令:

docker run --name nifi -v $(pwd):/opt/certs -p 8443:8443 \
-e AUTH=tls \
-e KEYSTORE_PATH=/opt/certs/keystore.jks \
-e KEYSTORE_TYPE=JKS \
-e KEYSTORE_PASSWORD='Ey0btN5duTeyBv1sVuy+1twPpYNgeoox47iwLwSSx5U' \
-e TRUSTSTORE_PATH=/opt/certs/truststore.jks \
-e TRUSTSTORE_PASSWORD='dSjZjfFQDVNG/p6U6ad7n90dZxd2EJK4W18JM02w9BM' \
-e TRUSTSTORE_TYPE=JKS -e INITIAL_ADMIN_IDENTITY='CN=AdminUser, OU=nifi' \
apache/nifi:latest
docker run --name nifi-registry -v $(pwd):/opt/certs -p 18443:18443 \
-e AUTH=tls \
-e KEYSTORE_PATH=/opt/certs/keystore.jks \ 
-e KEYSTORE_TYPE=JKS \ 
-e KEYSTORE_PASSWORD='Ey0btN5duTeyBv1sVuy+1twPpYNgeoox47iwLwSSx5U' \
-e TRUSTSTORE_PATH=/opt/certs/truststore.jks \
-e TRUSTSTORE_PASSWORD='dSjZjfFQDVNG/p6U6ad7n90dZxd2EJK4W18JM02w9BM' \
-e TRUSTSTORE_TYPE=JKS \
-e INITIAL_ADMIN_IDENTITY='CN=AdminUser, OU=nifi' \
apache/nifi-registry:latest

这是工具包命令:

./tls-toolkit.sh standalone -n 'localhost' -C 'CN=AdminUser, OU=nifi' -o './target'

如何通过 nifi 实例访问安全注册表?

4

1 回答 1

0

无法获取存储桶列表:javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:找不到匹配 IP 地址 172.17.0.5 的主题替代名称

自从我使用 NiFi TLS 工具包以来已经有一段时间了,但是您生成了一个具有该名称的证书,localhost并且在这里尝试对容器的 IP 地址进行 SSL 请求。您需要做的几件事:

  1. 将两个容器放在同一个网络上,并使用彼此已知的主机名。使用 Docker Compose 很容易做到这一点,只需声明两个容器并link在注册表中添加一个指向 nifi 容器的容器。
  2. 为使用其 docker 主机名的 NiFi 和注册表生成证书,例如,如果您将注册表称为“注册表”并可以在该主机名上的 Docker 网络上对其进行 ping 操作,“CN=registry,OU=...”就足够了。
于 2020-10-28T11:47:59.363 回答