通常,在 C 或 C++ 中,要通过 SSL/TLS 加密的 TCP 套接字进行通信,您需要使用 SSL/TLS 提供程序(OpenSSL、GnuTLS 等)为您提供的任何函数来执行读取和写入,例如:BIO_write, BIO_read等
我有一个 C 例程,它从套接字读取和写入,并且我希望能够向它传递 TLS 套接字,以便它可以通过该连接执行加密通信。但是,当我想保持原样时,这将需要我重写该函数,以便它使用 BIO_read、BIO_write 等例程。
有什么方法可以创建一个套接字(或转换现有的套接字),该套接字将自动加密/解密(即:“透明地”)写入和读取的所有数据,理想情况下完全在用户空间中,以便使用该套接字的例程socket不需要担心如何传输数据吗?或者我最好为那些选择使用哪个读/写例程的读/写创建包装例程?
答案1
UCSPI-SSL 系列是用于此目的的工具集系列之一。 William Baxter 的 ucspi-ssl 软件包催生了 Scott Gifford 的 ucspi-ssl 软件包,后者又催生了 Erwin Hoffman 的 ucspi-ssl 软件包。在每一个中,您都可以从 运行您的程序sslserver
,该程序处理接受传入连接、SSL 握手和数据加密/解密,并且您的程序只是像普通工具一样通过其标准输入和输出来处理纯文本。
Gerrit Papesslsvd
是 ipsvd 工具集中的工具之一,可以完成类似的工作。
进一步阅读
答案2
看autossl.so这是一个LD_PRELOAD
可共享库,可将纯文本套接字升级到 SSL/TLS,而无需修改客户端应用程序。
免责声明:这是我写的。