我在 Haskell 中有一个流式 API(与 OpenSSL 的 BIO 不同),我想将 SSL/TLS“代理”注入其中。更具体地说,假设我有一个网络模型
Server| <---> |Logger>| <---> |<Logger| <---> |Client
(我写Logger>
的意思是“下游”记录器)并且我想写一个 FFI 来调用 OpenSSL 以将 TLS 注入到这里的中心
Server| <---> |Logger>| <---> |TLS>| <---> |<TLS| <---> |<Logger| <---> |Client
这样和之间的通信TLS>
就<TLS
被加密了。让我构建的 OpenSSL 最简单的接口是什么<TLS
?在那之后,最简单的构建界面是TLS>
什么?
换句话说,我的项目与我读过的大多数教程不同,因为我希望能够同时BIO_gets
使用BIO_puts
SSL 结构。这类似于我为 SSL 客户端连接管理自己的传输,但“传输”是通过将 C 指针向上提升到 Haskell 来执行的。
(我确信我完全错过了关于SSL
+BIO
交互的一些基本知识。)
从http://www.openssl.org/docs/crypto/BIO_s_bio.html我看到一个应用程序,就像我正在拍摄的那样:
BIO *internal_bio, *network_bio;
...
BIO_new_bio_pair(internal_bio, 0, network_bio, 0);
SSL_set_bio(ssl, internal_bio, internal_bio);
SSL_operations();
这似乎大致正确。我将能够同时puts
和gets
on network_bio
。