我已经用 C 语言编写了一个基于事件的网络库,现在我想通过 OpenSSL 添加 SSL/TLS 支持。而不是使用SSL_read()
and SSL_write()
,我宁愿让 OpenSSL 只执行传出/传入数据的加密/解密,让我自己传输/接收数据。
我是 SSL/TLS 和 OpenSSL 的新手,所以:
有没有办法拥有 OpenSSLonly执行加密/解密char
arrays?
就像是size_t SSL_encrypt(const char *buf_in, size_t size_in, char *buf_out)
会很好。
您所要求的正是不可能的,因为使用 TLS,在应用程序层发送内容和在网络套接字上发送内容之间不存在一对一的对应关系。重新协商等事件意味着有时 SSL 需要从网络读取数据才能继续发送数据,反之亦然。
但是,您仍然可以使用 OpenSSL 来执行 SSL,但需要自行处理网络的读写操作。您可以通过调用来做到这一点SSL_set_bio()
on the SSL
指针而不是SSL_set_fd()
:
Use BIO_new_bio_pair() http://www.openssl.org/docs/crypto/BIO_s_bio.html#创建一个连接的 BIO 对。 SSL 例程将读取和写入一个 BIO,应用程序将读取和写入另一个 BIO(允许它通过所需的任何方法将数据传递到另一端)。
Use SSL_set_bio() http://www.openssl.org/docs/ssl/SSL_set_bio.html#在新的 SSL 对象上将读取和写入 BIO 设置为生成的 BIO 对中的一个。
Use BIO_read()
and BIO_write()
在该对中的另一个 BIO 上读取和写入 SSL 协议数据。
Use SSL_accept()
, SSL_connect()
, SSL_read()
and SSL_write()
与 SSL 对象上的正常情况一样。
(不过,目前还不清楚这会给您的应用程序带来什么好处:在这种情况下,除了准确地读取和写入 OpenSSL 传递给您的内容之外,您实际上无法做任何其他事情,因此您不妨让它也进行读取和写入) 。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)