Use OpenSSL with a custom channel

2019-08-16 18:03发布

我开发(以CPP)通过HTTP的唯一协议,我用它与我的服务器进行通信。 现在,我要建立在我的私有协议来传输数据本身SSL连接。

我能做到使用OpenSSL呢? 我在网上搜索和所有我发现是一些与生物相关的,但我并不明白如何使用它我的需要..

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

TNX提前:)

Answer 1:

使用BIO对。 您可以在找到一个例子ssltest.c程序,搜索源bio_pair 。 其基本思想是,你把OpenSSL的引擎作为一个黑盒子。

有四件事情你的代码必须做:

  1. 当您在连接到另一端接收加密的数据,你必须把它写入SSL引擎的加密BIO。

  2. 当SSL引擎要加密的数据发送给对方,你必须从SSL引擎的加密BIO阅读并运输到另一侧。

  3. 当你有你想要加密并发送纯文本,你必须把它写入SSL引擎的明文BIO。

  4. 当SSL引擎已明文它已经解密了你,你必须从SSL引擎的明文BIO阅读。

OpenSSL的纯粹作为以下SSL协议和移动两个BIOS之间的数据的引擎。 它所有的协议协商和操作的你,只要你把这些数据流的所有四个移动。

有一点要注意,我可以给你的是 - 不要以为这些东西之间的特殊关系。 例如,您可能要加密并发送一些明文,而当你把它写在SSL引擎的明文BIO,直到它从另一端接收一些加密数据的SSL引擎可能无法做出向前进步。 对待SSL引擎作为一个黑盒子,做所有这四件事只要有可能。 不要试图“透视”的SSL引擎,例如,期望因为你递给了SSL引擎的一些加密的数据将有一定的明文为您服务。 它可能,但也可能需要加密的数据发送给对方。

另一项值得注意的:在SSL引擎只有一个状态。 它不具有读取状态和写入状态。 (搜索这个主题为“噩梦般的场景”,如果你想丑陋的细节。)这是最有可能的,如果你使用多线程的SSL连接咬你,并期望它的行为就像一个TCP连接(如读取和写入侧面是独立的,除了在一个致命的错误或连接的关闭)的情况下。



Answer 2:

第二个方案 - 即拥有自己的消息,并使用HTTP客户端和服务器之间传递它们的协议。

如果您使用HTTP来传递自己的消息,使用OpenSSL为SSL / TLS将意味着你需要编写自己的HTTP库库了。

相反,使用支持HTTPS的HTTP库(大多数人),通过OpenSSL的或没有。 交换对HTTPS的顶部自定义邮件应该是非常透明的,类似于使用普通HTTP。 你只需要正常配置HTTPS。



文章来源: Use OpenSSL with a custom channel
标签: ssl openssl