【问题标题】:SSL wrapper stream in CC 中的 SSL 包装流
【发布时间】:2009-12-03 18:44:47
【问题描述】:

我有一个简单的 C 语言 stream_t 类型,带有基本的读/写操作,并支持使用函数指针的多个底层实现。因此,流可以由文件、字符缓冲区等支持。

一种流类型是标准 POSIX 套接字,我想编写一个包装流,它将向现有流添加 SSL 支持,类似于 .NET 的SslStream。所以我可以这样写:

stream_t *socket = something(); // 包装现有流并作为客户端执行握手 stream_t *ssl_stream = ssl_stream_create(socket); ssl_stream_authenticate_as_user(ssl_stream); // 现在所有读/写都被加密并传递给包装的流

在使用 OpenSSL 的 BIO_new_connect(...) 等之前,我已经编写了一些 SSL 套接字代码,但这是一个比我需要的更高级别的 API。 OpenSSL 是否公开了我手动执行握手和加密所需的功能?或者还有其他我可以使用的库吗?

【问题讨论】:

    标签: c ssl openssl


    【解决方案1】:

    我不知道您可以使用任何库,但您可以找到大量示例。 C 中的大多数应用程序都必须对其 TCP 代码执行相同的操作,因此 SSL 和原始套接字版本不会有太大差异。

    例如,从 Pine IMAP 中查看 ssl_unix.c,

    https://svn.cac.washington.edu/public/alpine/snapshots/imap/src/osdep/unix/

    它完全符合您对 OpenSSL 的描述。

    【讨论】:

      【解决方案2】:

      我使用BIO_s_mem 作为 SSL 套接字操作的掩护。我会自己读取和写入套接字(而不是将句柄交给 OpenSSL 并让它进行读/写)。当您调用SSL_accept(在服务器端)或SSL_connect(在客户端)时,握手就完成了。除此之外,只需致电SSL_readSSL_write 进行读写操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-28
        • 2022-08-18
        • 2020-04-26
        相关资源
        最近更新 更多