我在CPP中开发了一种基于HTTP的唯一协议,并使用它与我的服务器进行通信.现在,我想通过我的专有协议建立SSL连接以传输数据本身.
我可以使用OpenSSL吗?我搜索了网络,我找到的所有内容都与BIO有关,但我不明白如何使用它来满足我的需求..
无论如何,对我来说最好的解决方案是我可以通过OpenSSL传递我专有的发送和接收功能,这样所有的通信本身都只能通过我的功能.
TNX领先:)
Dav*_*rtz 10
使用BIO对.您可以在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引擎只有一个状态.它没有读状态和写状态.(如果你想要丑陋的细节,请在这个主题中搜索"噩梦场景".)如果你使用多个线程的SSL连接并且期望它的行为就像一个TCP连接(读写的地方),这很可能会让你感到困惑.除了致命错误或连接关闭之外,双方是独立的.
归档时间: |
|
查看次数: |
1378 次 |
最近记录: |