- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
客观的
由于 Nifi 通过 HTTP 与其他工具集成,所以我必须使 ListenHTTP
处理器面向公众。所有 3 个环境中的 API 网关对我来说都太贵了。因此,我关闭了外部网络的所有 VM 入口端口(ListenHTTP
所需的端口除外)。
问题
我的配置ListenHTTP
与 StandardRestrictedSSLContextService
不起作用。如果没有 SSL,它可以工作,但不安全。
user$ curl -X POST -H "Content-Type: application/json" --data "test" https://localhost:7070/test
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
.....
user$ curl -X POST -H "Content-Type: application/json" --data "test" --cacert cacerts.jks https://localhost:7070/test
curl: (77) error setting certificate verify locations:
CAfile: cacerts.jks
CApath: none
问题
ListenHTTP
使用 SSL 证书?我究竟做错了什么?
StandardRestrictedSSLContextService
将验证客户端是否在 TrustStore 中有证书。 ListenHTTP
保护单个端口处理器 - 那么我不需要 nifi.security.needClientAuth "Standalone Instance, Two-Way SSL" 中定义的属性或所有环境变量部分,对吧?我有点困惑,因为 Docker Image 和 StandardRestrictedSSLContextService
包含相同的配置,即 KEYSTORE_TYPE。 ListenHTTP
处理器在 7070 端口。 ListenHTTP
使用 StandardRestrictedSSLContextService
具有以下配置的 Controller :最佳答案
SSLContextService
您使用的可能不包含由可公开访问的证书颁发机构 (CA) 签名的证书,例如(仅用于解释目的;不认可)Comodo、Verisign、Let's Encrypt 等。
由这些 CA 签名的证书通常会被任意客户端自动信任,因为构建客户端的人(Java、Google/Microsoft/Mozilla/Apple 用于浏览器,Microsoft/Apple/Linux Distro 用于操作系统)已经抢先包含了这些顶级公共(public)证书在客户端的信任库中。您创建的信任库 cacerts.jks
采用 Java Keystore 格式,curl
碰巧不明白。您可以使用 the commands here 将公共(public)证书从该 keystore 导出到 PEM 格式的独立文件中。 ,但这只会解决允许 curl
的直接问题。使用任意信任库进行连接。
如果您希望通用外部客户端能够通过 TLS 连接,则需要使用 NiFi keystore 中由知名 CA 签名的证书。您可以为此目的使用任何商业 CA,但 Let's Encrypt确实免费提供这项服务,并且使用非常广泛。一旦您使用由 CA 签名的证书,任何*客户端都可以连接。
如果这仅供内部/企业使用,并且所有允许的客户端都可以由您控制,那么您可以使用自签名证书(就像您现在按照 Simon 的说明做的那样),并将公共(public)证书导出为您的任何格式其他客户端需要与此特定服务器建立信任。从理论上讲,您还可以强制每个尝试连接的客户端还需要提供服务器 (NiFi) 可以验证的证书——这称为 双向认证 TLS 并增加了另一层安全性,因为只有经过身份验证的客户端才能向该服务器发出请求。如果您选择这样做,那就是 SSLContextService
在 ListenHTTP
还需要一个信任库组件。
在不知道您的明确情况的情况下,我强烈推荐选项 1(签名证书)。
关于security - 尼菲 : how to make ListenHTTP work with SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62695524/
客观的 由于 Nifi 通过 HTTP 与其他工具集成,所以我必须使 ListenHTTP处理器面向公众。所有 3 个环境中的 API 网关对我来说都太贵了。因此,我关闭了外部网络的所有 VM 入口端
Apache Nifi 中的 ListenHTTP 与 HandleHTTPRequest 处理器之间的主要区别是什么?什么时候用ListenHTTP,什么时候用HandleHTTPRequest?
刚刚开始使用 nifi。有一个类型为“ListenHTTP”的 http 处理器没有监听端口 9090需要在 http://localhost:9090/ 上允许 http POST终点我无法在该处理
我是一名优秀的程序员,十分优秀!