为了完成这一系列关于缓冲区和I/O操作的教程,让我们简要地了解一下在Boost.Asio中如何处理加密I/O。
那么,SSL还是TLS?
当人们说“SSL”时,他们通常指的是基于SSL家族标准的数据加密。然而,SSL本身,即“安全套接字层”,实际上是一个特定的标准,有三个主要修订版,它们都在很久以前就已经被弃用了。TLS是下一个标准,它的1.2版本之前的版本也已经被弃用。截至2020年,TLS 1.2仍在使用,但我相信它也很快会被弃用。TLS 1.3自2018年起就已经可用,所以目前它仍然相对新鲜。关于标准的更多信息可以在维基百科上找到:Transport Layer Security。
然而,如果您不是加密库的开发人员,而是其用户,您不必为所有这些版本问题烦恼。通常,您只需要确保自己是最新的,不使用某些已弃用的标准版本。因此,在这个教程集中,当我提到“SSL”时,我指的是当前正在使用的SSL家族标准,而不是某个特定的已弃用标准版本。
SSL I/O
在Boost.Asio中,SSL被提供为对OpenSSL库的更高级别抽象。OpenSSL是一个相当庞大的工具,它值得有自己的书,而不仅仅是一个教程课程。
在Boost.Asio中,流是一个概念。一个流可以包装到另一个流中。TCP套接字是一个流。SSL是一个流模板。要在Boost.Asio中处理SSL,您应该将TCP套接字包装到SSL流中:
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>
using ssl_socket = boost::asio::ssl::