将 OpenSSL 与自定义通道结合使用

2024-02-29

我(在 CPP 中)开发了一种基于 HTTP 的独特协议,并使用它与我的服务器进行通信。 现在,我想通过我的专有协议建立 SSL 连接来传输数据本身。

我可以使用 OpenSSL 来实现吗?我在网上搜索了所有与 BIO 相关的内容,但我不明白如何使用它来满足我的需求。

无论如何,对我来说最好的解决方案是我可以通过 OpenSSL 我专有的发送和接收功能,这样所有通信本身将只通过我的功能。

TNX 领先:)


使用 BIO 对。您可以在以下位置找到一个示例ssltest.c http://www.opensource.apple.com/source/OpenSSL/OpenSSL-7.1/openssl/ssl/ssltest.c程序,搜索源代码bio_pair。基本思想是将 OpenSSL 引擎视为黑匣子。

您的代码必须执行四件事:

  1. 当您通过与另一端的连接接收加密数据时,您必须将其写入 SSL 引擎的加密 BIO。

  2. 当SSL引擎想要发送加密数据给对方时,你必须从SSL引擎的加密BIO中读取它并传输给对方。

  3. 当您有想要加密并发送的明文时,您必须将其写入 SSL 引擎的明文 BIO。

  4. 当 SSL 引擎已经为您解密了明文时,您必须从 SSL 引擎的明文 BIO 中读取它。

OpenSSL 纯粹充当遵循 SSL 协议并在两个 BIO 之间移动数据的引擎。只要您保持所有这四个数据流的移动,它就会为您完成所有协议协商和操作。

我可以给你的一个警告是——不要假设这些事物之间有任何特殊关系。例如,您可能有一些想要加密和发送的明文,当您将其写入 SSL 引擎的明文 BIO 时,SSL 引擎可能无法继续前进,直到它从另一端接收到一些加密数据。将 SSL 引擎视为黑匣子并尽可能执行所有这四件事。不要尝试“查看”SSL 引擎,例如,不要期望因为您向 SSL 引擎提供了一些加密数据,所以它必然会为您提供明文。可能,但它可能还需要将加密数据发送到另一方。

另一项警告是:SSL 引擎只有一种状态。它没有读状态和写状态。 (搜索这个线程 http://www.mentby.com/david-schwartz/is-full-duplex-socket-use-possible-with-openssl.html如果您想要丑陋的细节,则为“噩梦场景”。)如果您使用具有多个线程的 SSL 连接并期望它的行为就像 TCP 连接(其中读取和写入端是独立的,除了如果发生致命错误或连接关闭)。

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

将 OpenSSL 与自定义通道结合使用 的相关文章

随机推荐

  • 应用程序沙箱:重命名文件不起作用

    我有一个基本的 Cocoa 应用程序 让用户管理文件列表 文件是通过拖放添加的 并且我在应用程序重新启动时将访问权限保留在安全书签中 到目前为止 一切都很好 允许应用程序读取和写入用户的文件 但重命名失败并出现权限错误 声称不允许我的应用程
  • Excel中的模式匹配

    我有一个包含两列的 Excel 工作表 第一列是关键词 第二列是消息 关键短语可能出现在消息栏中 我需要知道某个关键词在消息栏中出现了多少次 关键词是一列 消息是第二列 消息列是1个或多于1个关键短语的组合 串联 我需要找出每条消息包含多少
  • 让应用程序显示为 Android 锁屏?

    对此我还没有找到明确的答案 许多应用程序允许您构建 安装自定义锁定屏幕而无需root等 这就像安装应用程序一样 我在开发指南中找到了这个 http developer android com reference android view W
  • 如何使用requirements.txt中的pip和setup.py安装github zip文件?

    我正在与一个名为的图书馆合作lief由于它缺乏 pip 的完整 python 3 7 支持 我需要从以下链接安装它https github com lief project packages raw lief master latest p
  • 是否可以使用 HashSet 作为 HashMap 的键?

    我想用一个HashSet作为一个关键HashMap 这可能吗 use std collections HashMap HashSet fn main let hmap HashMap
  • jsTree 节点展开/折叠

    今天早上我遇到了优秀的 jstree jQuery UI 插件 一句话 太棒了 它易于使用 易于设计并且符合包装盒上的说明 我尚未弄清楚的一件事是 在我的应用程序中 我想确保在任何给定时间仅扩展一个节点 即 当用户单击 按钮并展开节点时 任
  • PyQt4 使用 __init__ 的不同方式

    所以 我正在尝试使用 PyQt4 从基本的 Python 转向一些 GUI 编程 我正在看几本不同的书籍和教程 它们似乎都有稍微不同的启动类定义的方式 一个教程是这样开始课程的 class Example QtGui QDialog def
  • 当简单捕获中的标识符显示为参数的声明符 id 时,没有编译器诊断

    关于 lambda 捕获的部分 expr prim lambda capture 5 http eel is c draft expr prim lambda capture 5 指出 如果 simple capture 中的标识符作为 l
  • 如何将结构数组传递给 C++ 中的函数

    我需要将结构数组传递给函数 我这样做 这是我的职责 void ShowRoutes Route routeList int n string title 这是函数调用 ShowRoutes routeList n Unsorted list
  • 如何在 Javascript 中循环键/值对象? [复制]

    这个问题在这里已经有答案了 var user 现在我想创建一个setUsers 方法接受一个键 值对对象并初始化user多变的 setUsers function data loop and init user 其中数据如下 234 joh
  • CTE 和 TEMP 表之间的主要区别是什么?

    使用有好处吗CTE s common table expressions 而不是使用temp tables 我对它们进行了性能测试 但我找不到它们之间有多大区别 使用有哪些优点和缺点CTE S CTE 和临时表之间最大的区别可能是 CTE
  • 按值设置选择选项“选定”

    我有一个select字段中包含一些选项 现在我需要选择其中之一options使用 jQuery 但是当我只知道value of the option必须选择那个 我有以下 HTML div class id 100 div
  • 安装 DBD::Oracle 时出错

    我正在尝试在我的 RHEL6 1 服务器上安装 Perl 模块 DBD Oracle 在此过程中 我遵循了以下步骤 安装以下 RPM oracle instantclient12 1 basic 12 1 0 2 0 1 x86 64 rp
  • Xcode 构建设置“构建产品路径”(CONFIGURATION_BUILD_DIR)是一个谎言?

    如果我创建一个新的应用程序项目 构建设置如下所示 它声称正在使用构建目录build Debug iphoneos 我认为这是相对于项目目录的 实际上 该项目被编译到 派生数据 目录下 Library Developer Xcode Deri
  • Rails:使用 Authlogic 进行授权

    我需要一个非常精细的授权系统 可以与真实逻辑 http github com binarylogic authlogic tree master 到目前为止我已经尝试过这些宝石 插件 Lockdown http stonean com wi
  • 在 Chef 中使用属性

    刚刚开始使用chef最近 我发现属性存储在一个名为的大型整体哈希中node可在您的食谱和模板中使用 似乎有多种定义属性的方法 直接在食谱本身中 在属性文件下 例如attributes default rb 在传递给的 JSON 对象中che
  • 将多行合并为具有多列的不同行的查询

    我不认为自己是一个完整的 SQL 新手 但我已经断断续续地盯着这个问题两天了 我开始想也许我就是 使用以下两个表 ID Category 1 Animal 2 Color 3 Sport Name ID Value Fred 1 Cat F
  • iOS 8 上的 MPVolumeView 动画

    iOS 8 中存在一个问题或一个功能 当 MPVolumeView 显示时 它会被动画化 就像从 0 扩展到它的宽度一样 我该如何纠正这种行为 iOS 7 上没有这个问题 消除此行为的一种可能方法是子类化 MPVolumeView 并在之后
  • Svelte商店功能更新

    Svelte 存储文档显示正在更新字符串或整数 但我没有在存储中找到任何动态函数 我不明白如何制作getData作为可写函数以通知 html 发生的变化 在下面的示例中 我想b后显示updateKey函数被调用 您将在此处找到 REPL 中
  • 将 OpenSSL 与自定义通道结合使用

    我 在 CPP 中 开发了一种基于 HTTP 的独特协议 并使用它与我的服务器进行通信 现在 我想通过我的专有协议建立 SSL 连接来传输数据本身 我可以使用 OpenSSL 来实现吗 我在网上搜索了所有与 BIO 相关的内容 但我不明白如