我试图在C中实现一个简单的OpenSSL客户端/服务器模型,并对使用BIO_ *调用感到好奇,这些调用允许一些不错的功能与原始SSL_ *调用相比。
我对此比较陌生,所以我可能完全看错了,但是可以在客户端上使用BIO_ *调用,而不是在服务器上使用它吗?或者要建立连接,必须在客户端和服务器上进行BIO_ *握手吗?
答案 0 :(得分:0)
首先,有许多类型的BIO 。 BIO可用于访问本地磁盘文件(或其他操作系统文件,如串行端口),普通(TCP或UDP)套接字或内存缓冲区,就像它们是文件(例如PEM格式但不是文件中的东西),进行通信线程之间,以及通过加密,散列和编码“过滤”数据。您的问题似乎只涉及类型SSL 的BIO。
是的,SSL BIO只是一个包装。你可以用SSL BIO上的BIO_调用做的一切也可以通过SSL_调用加上一些内部数据操作来完成,比如sprintf,sscanf,strcat,memchr等等。特别是,没有什么“在线”(发送)由于端点使用BIO,因此在协商的SSL / TLS协议中从对等端接收和接收使用BIO的端点可以与使用或不使用BIO的端点完全相同地进行通信,就像OpenSSL端点一样,BIO或非BIO可以与使用不同SSL / TLS实现的端点进行通信,而不是任何类型的OpenSSL。