我(在 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 引擎视为黑匣子。
您的代码必须执行四件事:
当您通过与另一端的连接接收加密数据时,您必须将其写入 SSL 引擎的加密 BIO。
当SSL引擎想要发送加密数据给对方时,你必须从SSL引擎的加密BIO中读取它并传输给对方。
当您有想要加密并发送的明文时,您必须将其写入 SSL 引擎的明文 BIO。
当 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(使用前将#替换为@)