Nifi:如何使 ListenHTTP 与 SSL 配合使用

2024-02-09

客观的

由于 Nifi 通过 HTTP 与其他工具集成,我必须ListenHTTP处理器面向公众。所有 3 个环境上的 API 网关对我来说太贵了。所以我关闭了所有虚拟机入口端口(除了ListenHTTP) 对于外部网络。

Issue

我的配置为ListenHTTP with 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

Question

怎么做ListenHTTP使用 SSL 证书?我究竟做错了什么?

更详细的问题:

  1. 我应该将 cacerts.jsk 复制到发出查询的计算机吗?据我所理解,StandardRestrictedSSLContextService将验证客户端是否在 TrustStore 中拥有证书。
  2. 如果我只需要保护一个端口ListenHTTP处理器 - 那么我不需要nifi.security.needClientAuth https://docs.cloudera.com/HDPDocuments/HDF3/HDF-3.1.2/bk_administration/content/security-configuration.html属性或定义在的所有环境变量“独立实例,双向 SSL” https://hub.docker.com/r/apache/nifi部分,对吗?我有点困惑,因为 Docker Image 和StandardRestrictedSSLContextService包含相同的配置,即 KEYSTORE_TYPE。

已经完成了

  1. 我对 KeyStore 和 TrustStore 有一个大概的了解这个问题 https://stackoverflow.com/questions/6340918/trust-store-vs-key-store-creating-with-keytool文档 https://docs.oracle.com/cd/E19798-01/821-1841/gjrgy/.
  2. 我已经推出了Nifi Docker 容器 v1.10.0 https://hub.docker.com/r/apache/nifi启动并运行ListenHTTP7070 端口上的处理器。
  3. 我创建了 keystore.jks 和 cacerts.jks 文件,因为操作说明 https://www.simonellistonball.com/technology/nifi-ssl-listenhttp/Nifi 容器内。
  4. I have configured ListenHTTP to use StandardRestrictedSSLContextService controller with the following configs: enter image description here.

The SSLContextService您使用的可能不包含由可公开访问的证书颁发机构 (CA) 签名的证书,例如(仅用于解释目的;不认可)Comodo、Verisign、Let's Encrypt 等。

由这些 CA 签名的证书通常会被任意客户端自动信任,因为无论谁构建客户端(浏览器为 Java、Google/Microsoft/Mozilla/Apple,操作系统为 Microsoft/Apple/Linux Distro),都已预先包含了这些顶级公共证书在里面信任库客户的。您创建的信任库cacerts.jks是 Java Keystore 格式,curl碰巧不明白。您可以使用以下命令将公共证书从该密钥库导出到 PEM 格式的独立文件这里的命令 https://nifi.apache.org/docs/nifi-docs/html/toolkit-guide.html#additional_certificate_commands,但这只能解决眼前的问题curl与任意信任库进行连接。

如果您希望通用外部客户端能够通过 TLS 连接,则需要使用 NiFi 密钥库中的证书,即signed由知名 CA 提供。您可以使用任何商业 CA 来实现此目的,但是让我们加密 https://letsencrypt.org/确实免费提供这项服务,并且使用非常广泛。一旦您使用由 CA 签名的证书,任何*客户端都将能够连接。

如果这仅供内部/企业使用,并且所有允许的客户端都可以由您控制,那么您可以使用自签名证书(就像您现在按照西蒙的说明所做的那样),并将公共证书导出为您想要的任何格式。其他客户端需要与该特定服务器建立信任。理论上,您还可以强制要求每个尝试连接的客户端也需要提供证书server(NiFi)可以验证——这就是所谓的相互验证 TLS并增加了另一层安全性,因为只有经过身份验证的客户端才能向该服务器发出请求。如果您选择这样做,那就是SSLContextService in ListenHTTP还需要一个信任库组件。

在不了解您的具体情况的情况下,我强烈推荐选项 1(签名证书)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nifi:如何使 ListenHTTP 与 SSL 配合使用 的相关文章

  • SSL 速度:128 位与 256 位

    我决定使用 SSL 加密我的整个网站 即使实际上只有部分网站是必要的 最终结果是该网站现在有点慢 所以 我的问题是 我是否应该只加密网站的会员部分 请记住我在首页上有登录表单 我是否应该将加密降低到 128 位 如果站点总体较小 速度差异是
  • checkmarx - 如何解决存储的绝对路径遍历问题?

    Checkmarx v 9 3 0 HF11 我将 env 值作为 dev uat 服务器中使用的 docker 文件中的数据目录路径传递 ENV DATA app data 在本地 使用以下环境变量 数据 C 项目 应用程序 数据 get
  • 启用 TLSv1.2 和 TLS_RSA_WITH_AES_256_CBC_SHA256 密码套件

    Server TLS Version v1 2 Cipher Suite TLS RSA WITH AES 256 CBC SHA256 Client JRE 1 7 当我尝试直接通过 SSL 从客户端连接到服务器时 收到以下错误 Caus
  • 无法访问 GitLab:SSL 证书已过期

    在 Visual Studio 中 我尝试从 GitLab 上的存储库中提取一些更改 但它给了我一个错误 Git 因致命错误而失败 无法访问https gitlab git SSL证书问题 证书已过期 如何生成新证书并将其添加到 VS 中
  • Flex 和 crossdomain.xml

    我想知道将 crossdomain xml 添加到应用程序服务器的根目录是否存在任何安全问题 它可以添加到服务器的任何其他部分吗 您是否知道任何不需要服务器放置此文件的解决方法 谢谢 达米安 通过添加 crossdomain xml 主要的
  • 为什么用户名不能更改?

    我到处都读到 并在实践中看到 用户名不应该更改 当我问为什么时 给出的理由是 安全 我一直在寻找关于为什么更改用户名不安全的明确答案 但我似乎找不到答案 这里有哪位有安全经验的人可以回答这个问题吗 注 如果您不知道答案 请不要猜测 我自己也
  • 如何确保密钥是在 TPM 内部创建的?

    我需要 在客户端计算机上运行 exe 这将在 TPM 中创建密钥对 然后我将使用 TPM 生成的密钥对的公钥部分创建 CSR 我关心的是如何确保密钥是在 TPM 内部创建的 而不是由欺骗的 TPM 创建的 这将使私钥能够被迁移和复制 我听说
  • 如何只允许从我的 iOS 应用程序访问我的 MySQL 数据库? (使用webapp作为数据库的网关)

    我的 iOS 应用程序需要连接到 mysql 服务器 为了实现这一目标 我想创建一个 Web 应用程序 充当客户端应用程序和服务器端数据库之间的中间人 我担心的是 有人可以简单地找出我的应用程序使用的 URL 并传递他们自己的 URL 参数
  • PRAW 出现 SSLError?

    我正在尝试开始使用 PRAW 但在使用 login 时遇到问题 我有以下代码 import praw r praw Reddit This is a test bot r login myRedditUsername password 我收
  • GetClientCertificate 使用什么主题?

    我正在尝试发送请求 ActiveXObject WinHttp WinHttpRequest 5 1 但是 这需要客户端证书才能执行此操作 我们已提供该证书 在 PHP cURL 中进行测试后 我可以这样做 curl setopt SOAP
  • Invoke-WebRequest SSL 失败?

    当我尝试使用时Invoke WebRequest我收到一些奇怪的错误 Invoke WebRequest Uri https idp safenames com Invoke WebRequest The underlying connec
  • com.ibm.msg.client.jms.DetailedJMSException:JMSWMQ0018:无法使用连接模式“yyy”和主机名“zzz”连接到队列管理器“xxx”

    JMS 应用程序需要七个参数才能与此处给出的 MQ 系列成功建立 SSL 连接 https github com ibm messaging mq tls ssl wizard blob master com ibm mq ssl wiza
  • https登录的安全性?

    我正在编写一个 Apple iOS 应用程序 用于登录帐户并获取一些余额 它使用纯 html 链接进行登录 用户名和密码在运行时动态加载到登录链接 我使用 Wireshark 嗅探了流量 但在发送的任何包中都找不到用户名或密码 我猜 htt
  • 将第一个数据证书导入 ColdFusion

    我尝试使用 keytool 将证书从 First Data 导入到我的 ColdFusion 9 设置中 如下所示 keytool importcert keystore MYCF9Dir runtime jre lib security
  • AF网络3问题

    In AFNetworking3 表示我使用的 SSL 证书无效验证证书链 false 但现在看来该字段已被删除 我无法向我的服务器发出请求 这是请求类 import UIKit import AFNetworking class Clie
  • 没有 ssl 的 Web 加密 API

    我编写了一个用于安全消息传输的小网络应用程序 以了解有关加密的更多信息 并想向我的朋友展示它并让他们玩一下 所以我将它托管在我的小服务器上 并惊讶地发现 Web Crypto API 我竭尽全力开始工作 因为它的错误消息不是很具体 需要 S
  • 如何使用 php 通过 https 下载文件

    我需要使用 PHP 下载 xml 文件 我可以在对文件进行curl 调用时通过设置以下选项来读取文件的内容 curl setopt http CURLOPT SSL VERIFYPEER false curl setopt http CUR
  • 如何在Rails 4.1中使用secrets.yml作为API_KEYS?

    在我最近的一个项目中 我开始于 gitignoring包含机密和环境变量的文件 因此 除了包含第三方机密 例如 Stripe Twitter API 或 Facebook Graph 或内部 api keys 等 的文件外 整个项目都致力于
  • 上下文切换到安全模式(arm trustzone)的成本是多少

    我试图了解在arm中可信 安全 和非安全模式之间来回切换的成本 从非安全世界转移到安全世界时到底需要发生什么 我知道需要设置 ns 位 基于某些特殊指令 需要刷新和更新页表 刷新和更新处理器缓存 还有什么需要发生的吗 处理器缓存 它们是分段
  • 在 React 应用程序中使用 API 密钥

    我有一个使用两个第三方服务的 React 应用程序 该应用程序已开始使用react create app 这两项服务都需要 API 密钥 通过脚本标签提供一个密钥 如下所示 另一个 API 密钥在请求中使用 我将实际密钥存储在常量中并使用它

随机推荐

  • django - 在选择上发布表单

    我制作了一个简单的 django 表单 其中包含一个选择列表 在单选按钮中 class MyForm forms Form choices forms ChoiceField widget forms RadioSelect choices
  • RESTful 服务认证

    根据 REST 规范 服务应该是无状态的 但随后就很难启用身份验证 我读过的一些东西说 让 REST 有状态并不是世界末日 但这不是重点 重点是遵循规范并保持一致 所以 我在这里问这个问题 希望有人能引导我走向正确的方向 我正在使用 Spr
  • 向现有 MongoDB 文档添加字段(在 Node.js 中使用 Mongoose)

    我在集合中有这个现有文档Article在 MongoDB 数据库中 site www atlantico fr date 2014 05 27T11 10 19 000Z link http www atlantico fr example
  • 如何从 SQLite android 中的表中删除行? [复制]

    这个问题在这里已经有答案了 我已经这样做了 但它不起作用 我正进入 状态force close public boolean favoriteDelete int id return database delete FavoriteData
  • 在 C++ main() 执行之前处理 Mac OS X 文件打开事件

    我用谷歌搜索了很多 但仍然找不到好的解决方案 因此 我将一个复杂的 Qt5 应用程序 某些网络服务的客户端 移植到 Mac OS X 10 7 0 Lion 及更高版本 我需要处理自定义文件 例如 xyz和自定义 URL 方案 例如xyz
  • zsh:在目录分隔符上停止向后杀字

    In zsh http www zsh org 我如何设置行编辑器 以便backward kill word停在目录分隔符上 目前在我的 bash 设置中 如果我输入 cd devel sandbox 然后打C w点将紧随其后devel 在
  • 模型工厂中的 Laravel 5.1 外键

    如何在模型工厂中定义外键 例如 如果我有一个组织表 其中包含国家 地区表的外键 则在我的模型工厂中 我必须为国家 地区 ID 定义一个虚拟值 如下所示 factory gt define App Organisation class fun
  • 为什么这个类/实例变量没有被初始化?

    我正在尝试使用 gnu smalltalk 在以下带有变量的简单类的代码中 我发现它没有初始化为给定值 Object subclass Myclass mainval mainval 555 getmainval mainval gc My
  • Hibernate - 具有排序顺序的多列索引

    我有以下代码 Table appliesTo MyTable indexes Index name MultipleColumnsIndex columnNames column1 columns2 注意 这是 Hibernate 表 通过
  • 有效筛选唯一值的数据 (Python)

    我有一个由 X Y Z A 值组成的 2D Numpy 数组 其中 X Y Z 是 3D 空间中的笛卡尔坐标 A 是该位置的某个值 举个例子 X Y Z A 13 7 21 1 5 9 2 7 0 5 15 3 9 1 1 13 7 21
  • 将列表应用于输出数据帧的函数

    我的单参数函数输出一个数据帧 library tidyverse myfun lt function x mtcars gt filter x gt group by cyl gt summarise mean disp mean drat
  • 如何在 Swift 中创建 _inline_ 递归闭包? [复制]

    这个问题在这里已经有答案了 对于 Swift 中的全局函数来说 递归是微不足道的 例如 func f f 但是 闭包不能引用自身 例如 var f Void gt Void f 产生以下错误 Variable used within its
  • 如何处理 jQuery 中的表单更改?

    在 jQuery 中 有没有一种简单的方法来测试是否any表单的元素发生了变化 假设我有一个表单和一个带有以下内容的按钮click event mybutton click function Here is where is need to
  • 如何从烂番茄上抓取一页以上的评论?

    我一直在使用这个抓取工具来抓取此网址的评论家评论 https www rottentomatoes com m avengers endgame reviews https www rottentomatoes com m avengers
  • java-8 过滤列表而不创建新列表

    我正在寻找使用简单的 lambda 来过滤 Java 8 中的列表的最干净的方法Predicate 无需创建新列表 特别是 该解决方案不合适 因为toList 返回一个新的List List
  • 回滚 Laravel 中的一项特定迁移

    I want 仅回滚 Rolled back 2015 05 15 195423 alter table web directories I run php artisan migrate rollback 我的 3 个迁移正在回滚 Rol
  • PHP Sort 函数用于对对象数组进行排序

    我有一个充满同一类对象的数组 例如 我想通过可选对象字段对该数组进行排序 case gt ID or case gt Sender 是否有内置的 array sort 函数可以执行此操作 或者我必须自己编写此排序函数 答案不必详细解释 这更
  • 沉默的例外,

    我在 64 位中遇到过这个奇怪的静默异常问题 到底是什么原因导致这种行为呢 我想了解为什么会发生这种情况以及推荐的解决方案是什么 消失的 OnLoad 异常 http blog paulbetts org index php 2010 07
  • 如何处理 IncompleteRead: 在 python 中

    我正在尝试从网站获取一些数据 然而它返回了我incomplete read 我试图获取的数据是一组巨大的嵌套链接 我在网上做了一些研究 发现这可能是由于服务器错误 之前的分块传输编码完成 达到预期大小 我还找到了上述问题的解决方法link
  • Nifi:如何使 ListenHTTP 与 SSL 配合使用

    客观的 由于 Nifi 通过 HTTP 与其他工具集成 我必须ListenHTTP处理器面向公众 所有 3 个环境上的 API 网关对我来说太贵了 所以我关闭了所有虚拟机入口端口 除了ListenHTTP 对于外部网络 Issue 我的配置