C++ 实现Kafka TLS双向加密

2023-11-07

基本概念

Kafka TLS双向加密包含的知识涉及到对称加密,非对称加密,Kafka,CA,数字证书。
本文采用C++ librdkafka 库来实现,client 相应证书为AWS(private CA)签名证书

非对称加密

非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密,反之亦然。

CA

CA,Catificate Authority,它的作用就是提供证书(即服务器证书,由域名、公司信息、序列号和签名信息组成)加强服务端和客户端之间信息交互的安全性,以及证书运维相关服务。
注意,TLS双向加密中CA机构是两个,分别为client CA 和 server CA

TLS双向加密过程

kafka 集群创建及client 公私钥创建参考 https://docs.aws.amazon.com/zh_cn/msk/latest/developerguide/msk-authentication.html
http://kafka.apache.org/documentation/#zk_authz_new_mtls
由于 librdkafka 库需要的参数证书及私钥是分开的,故需要将 jks 文件转换为两个 pem 文件
jks 文件转换为 pem 文件参考https://blog.csdn.net/x7057385/article/details/87162688

TLS 双向认证流程

在这里插入图片描述
注意:最后client、server端通信采用的是对称加密通信,对称密钥是经过了加密的,安全性高。

代码

#include <cppkafka/cppkafka.h>
#include <librdkafka/rdkafkacpp.h>

class Producer
{
public:
    Producer()
    {
        cppkafka::Configuration config = {
            { "metadata.broker.list", "localhost:9092" },
            { "security.protocol", "ssl" },
            { "ssl.ca.location", "/home/kafka/client_tls/tls-ca-bundle.pem" },  // public ca,linux系统文件位置为 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
            { "ssl.certificate.location", "/home/kafka/client_tls/cert.pem" },
            { "ssl.key.location", "/home/kafka/client_tls/pri_key.pem" },
            { "ssl.key.password", "123456" },
        };

        producer_ = std::make_shared<cppkafka::Producer>(config);
    }

    virtual ~Producer()
    {
    }

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

C++ 实现Kafka TLS双向加密 的相关文章

  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的

随机推荐

  • 夏普SHARP AR-2818 一体机驱动

    夏普SHARP AR 2818 一体机驱动是官方提供的一款一体机 打印 扫描 驱动 本站收集提供高速下载 用于解决一体机与电脑连接不了 无法正常使用的问题 本动适用于 Windows XP Windows 7 Windows 8 Windo
  • 干货分享丨Java开发稳步进阶之JVM内存区域,看完记得收藏!

    Java语言最重要的特点之一 跨平台使用 正是由于JVM的存在 想要Java开发稳步进阶 学JVM这条路绕不开 1 为什么要学JVM 我们都知道 要做Java开发 必须在你的电脑上安装JDK才行 安装JDK之后里面会有一个JRE的目录 JR
  • PROPAGATION_REQUIRED,ISOLATION_DEFAULT; '',-java.lang.Exception

    转https stackoverflow com questions 29117679 spring transactional management propagation required isolation default DEBUG
  • C语言——判断密码复杂程度

    题目 编写一个函数 传入密码 判断密码复杂程度 判断密码是否包含大写 小写 数字 解题思路 我们设定若包含大写 小写 数字其中一类为简单 包含两类为中等 三类为复杂 暂时不考虑其他字符的出现 我们预先设定密码为 Maobing520 主函数
  • layui分页遇到的问题及button和input的区别

    参考文献 漂亮分页样式和代码 http layui shagua wiki layuidoc demo laypage html 按钮input和代码 http www shagua wiki project 3 p 84
  • idea 运行vue项目,修改vue代码后,不起左右。删掉.idea重新导入就好了

    这是第二次修改vue代码后不起作用了 不知道idea2019怎么搞的 删掉 idea重新导入就好了 附 要vue 3 0及以上 才有public目录 2 x没有
  • C++-Z字扫描实现(Zigzag Scan)

    Z字扫描 Zigzag Scan 将二维矩阵压缩成行输出 int index 0 for int i 0 i
  • 使用FastGithub,告别无法访问Github

    FastGithub github定制版的dns服务 解析github最优的ip 源代码开源在github 加速原理 多种渠道获取github的ip github公开的ip 各dns服务器提值的ip ipaddress com反查的ip 轮
  • JavaScript的关键字详解

    1 abstract 抽象的 2 continue 用于跳过循环中的一个迭代 并继续执行循环中的下一个迭代 3 finally 在 try 和 catch 之后无论有无异常都会执行 4 instanceof 5 private 6 fals
  • Mac流程图工具-StarUML介绍

    转载请注明来源 作者 loongshawn http blog csdn net loongshawn article details 78786685 建议读者阅读原文 确保获得完整的信息 1 背景说明 推荐一款Mac流程图工具 效果如下
  • FIFO最小深度计算

    FIFO最小深度计算 文章目录 1 FIFO最小深度 2 示例分析 1 FIFO最小深度 在数据的传输中当读速率慢于写速率时 FIFO便可被用作系统中的缓冲元件或队列 类似于水流经过一个缓冲区 上游水流速度快 下游水流速度慢 部分水就可以被
  • 05-----关于C++使用VS时出现 error C2248: “xxx“ 无法访问private成员(在“MySpdlog“类中声明)

    一 问题描述 项目中遇到一下问题 需要写个测试程序 但是在搭建的过程中 出现错误的 心想 代码一样的 怎么就报错了呢 于是开始查找问题 错误如下 因为我的测试程序文件不算多 就5个 代码也不多 于是我使用软件进行对比正确的代码和错误的代码
  • uniapp 之 微信小程序、支付宝小程序 对于自定义导航栏的不同

    目录 前言 微信小程序 代码 支付宝小程序 首页配置文件 二级菜单页面 配置 总结 不同 相同 前言 小程序都是 uni app 写的 不是原生 微信小程序 代码 pages json文件中配置 重点 navigationStyle cus
  • 电磁兼容测试分析软件软件,电磁兼容测试方案的主要应用

    汽车制造商必须保证汽车的无用杂散处于规定界限范围内 EMI 同时 要保证汽车能够抵抗来自外部和内部源的骚扰 EMS 例如电视发射机 移动基站或其他电子汽车组件 作为该领域的全球领导者 罗德与施瓦茨提供高效的测试解决方案 确保您的产品符合电磁
  • 恢复hosts文件

    因破解GoLand需要 得修改hosts文件 打开目录 C Windows System32 drivers etc 尼玛 hosts文件怎么没有了 什么局面 手动恢复hosts文件 窗口键 X 运行 cmd打开控制台 输入命令 for f
  • MySQL的bin目录去哪里了

    方法一 点开始 运行 输入 services msc 在打开的 服务管理器 中找到mysql并双击 会弹出来个属性框框 常规 选项卡里面有个 执行路径 从这个路径你就可以看到它的bin目录在哪 很多人没有找到框 再次更新一下 方法二 打开任
  • 小米造车150天:烈火烹油第一枪

    贾浩楠 发自 凹非寺量子位 报道 公众号 QbitAI 小米官宣造车 小米开启智能驾驶招聘 小米7737万美元收购深动科技 小米汽车正式完成工商注册 落户北京亦庄 入局5个月 这是小米造车的一系列进展 还没算上2万多简历 300人团队 大量
  • IOS上架流程详解,包含审核避坑指南!

    准备 开发者账号 完工的项目 上架步骤 一 创建App ID 二 创建证书请求文件 CSR文件 三 创建发布证书 CER 四 创建Provisioning Profiles配置文件 PP文件 五 在App Store创建应用 六 打包上架
  • ABP框架 - 介绍

    文档目录 本节内容 简介 一个快速示例 其它特性 启动模板 如何使用 简介 我们总是对不同的需求开发不同的应用 但至少在某些层面上 一次又一次地重复实现通用的和类似的功能 如 授权 验证 异常处理 日志 本地化 数据库连接管理 设置管理 审
  • C++ 实现Kafka TLS双向加密

    C 实现Kafka TLS双向加密 基本概念 非对称加密 CA TLS双向加密过程 TLS 双向认证流程 代码 基本概念 Kafka TLS双向加密包含的知识涉及到对称加密 非对称加密 Kafka CA 数字证书 本文采用C librdka