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 配合使用 的相关文章

  • 使用 authlogic_api 进行 Rails REST API 访问

    我正在为 Steam 游戏编写 Rails 后端 API 该游戏只能通过 REST 调用访问 因此不需要特定于用户的身份验证 我正在努力实施authlogic api 插件 http github com phurni authlogic
  • gRPC + SSL = 未满足的链接错误

    我一直在尝试对我的 gRPC 服务进行 SSL 化 在纯文本模式下工作正常 注意 这是在商业环境中 这限制了我的一些选择 例如开发环境和部署平台 我跟着安全 md https github com grpc grpc java blob m
  • asp.net 中的 HTML 标签注入

    我的安全团队报告了以下代码的一个 html 标签注入安全问题 function ClosePopUp objBhID var pageName window location pathname var modalPopupBehavior
  • 身份验证中的随机数使用

    在基于摘要的身份验证中 随机数由服务器生成 然而 在基于 OAuth 的身份验证中 随机数是由客户端生成的 我想知道是否有人知道差异的原因 随机数用于使请求唯一 在没有随机数的身份验证方案中 恶意客户端可以生成一次请求并重放多次 即使计算成
  • 创建证书以通过 bash 在 Mac OS X 上签署 GDB

    我正在尝试通过以下方式在 Mac OS X 上安装 gdblink1 http www patosai com blog post installing gdb on mac os x yosemite and link2 http ntr
  • Firebase API 密钥限制不适用于 Android 应用程序包名称和 SHA1 指纹

    我们正在使用 Google Firebase 获取我们应用程序的 CrashLytics 数据 以及通过google services json文件被提出作为一个安全问题 因为应用程序 apk 文件可以被逆向工程来获取该文件 然后攻击者可以
  • PayPal IPN 确认因 SSL 例程失败:SSL3_READ_BYTES:sslv3 警报握手失败

    由于我们方面没有进行任何更改 并且可能与 POODLE SSL3 有关 因此您的 PayPal API 对 PIN Message validate 的调用现在失败了 SSL routines SSL3 READ BYTES sslv3 a
  • 在 Traefik 1.5.0-rc5 中使用新的 httpChallenge 时出现问题

    在尝试升级到最新的 traefik 版本以便能够从 LetsEncrypt 生成 TLS 证书时 我遇到了证书生成时间的问题 这之前工作过traefik 1 4使用acme ondemand标志和其他设置 减去httpChallenge当然
  • 使用您正在散列的内容的散列作为盐?

    假设用户注册了您的网站 您对他们选择的密码进行哈希处理 然后使用该哈希值作为盐 并使用该盐重新哈希其密码 Example String hash1 MD5 password String endHash MD5 hash1 password
  • 在 C# 中创建我的对称密钥

    一直在审查一些对称加密方法 我看到了很多在类中硬编码私有静态变量的示例 通常类似于 string key THISISYOURENCRYPTIONKEY 然后在更远的地方 代码使用它来加密 解密 抛开正确的实现 算法 策略以及存储它的位置
  • 正确使用 EncryptedSharedPreferences

    Android 最近发布了 EncryptedSharedPreferences 它自动加密 SharedPreferences 键 值数据 虽然这很好 但我发现我可以简单地连接 API 调用并检索解密的值 除了在调用 EncryptedS
  • 是否可以从 .apk 文件获取 Android.mk 或本机源文件?

    看来从 apk文件中获取Java源文件是很容易的 但是否有可能得到Android mk or native通过工具或棘手的方法从 apk 文件中获取源文件 我正在研究 Android 应用程序本机代码安全性 因此这些文件对我来说非常重要 谢
  • RabbitMq 和“致命错误:握手失败 -handshake_decode_error”

    我正在使用 Windows Server 2012 Erlang 19 2 和 RabbitMq 3 6 6 我在使用 TLS 配置端点之间的连接时遇到问题 我已经尝试了所有关于 SO 的答案 以及所有 RabbitMq 文档here ht
  • AWS ACM 证书管理 删除正在使用的证书

    我想删除 AWS Certificate Manager 中正在使用的 AWS 证书 为此 我使用建议的 AWS CLI 和以下命令 aws iam delete server certificate server certificate
  • 如何让 Sinatra 通过 HTTPS/SSL 工作?

    正如标题所示 谷歌没有提供任何与此相关的有用信息 如何为 Sinatra 应用程序设置和配置 HTTPS SSL 如何创建 HTTPS 路由 我以前从未在我的应用程序中使用过 HTTPS 也没有调整 Rack 其他内容的经验 所以我很欣赏详
  • 使用 iOS 分布式应用程序时 Google Cloud Messaging 显示“notRegistered”

    我在 iOS 应用程序上实现了 GCM 服务 我使用 PHP 在服务器上发送 GCM 当应用程序由开发配置文件签名时 它可以完美运行 也就是说 当应用程序使用 GCM 配置注册自身时 它始终返回一个正常运行的设备令牌 我可以使用令牌向设备发
  • 使用 TortoiseGit 创建 git 克隆时出现 SSL 证书问题

    我想在 TortoiseGit 的帮助下克隆 git 存储库 但出现错误 错误 SSL 证书有问题 请验证 CA 证书是否正常 细节 错误 14090086 SSL 例程 SSL3 GET SERVER CERTIFICATE 访问时证书验
  • 使用 VirtualDocumentRoot 的 SSL 虚拟主机

    我在 ubuntu 16 04 VM 上进行开发工作 当我处理多个项目时 为了让我的生活更轻松 我使用 VirtualDocumentRoot 和主机文件使用 dev 域从我的主文件夹中服务器站点 在 000 default conf 我有
  • 在 Windows 上不使用 OpenSSL 从 pfx 文件或证书存储中提取私钥

    正如标题所示 我想在不使用 OpenSSL 或任何其他第三方工具的情况下导出我的私钥 如果我需要一个 cer文件或 pfx我可以通过 MMC 或 PowerShell 轻松导出这些文件pkiclient但我找不到获取私钥的方法 https
  • 评估 CRC-32 实现中的差异

    我见过相同基本 CRC 32 算法的许多不同实现 如下所示 int remain int sbox SIZESBOX int dividend int bit for dividend 0 dividend lt SIZESBOX divi

随机推荐

  • 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 我的配置