NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
ssl_stream类 参考

SSL/TLS流封装类 更多...

#include <ssl_stream.hpp>

Public 类型

using native_handle_type
 原生文件描述符类型

Public 成员函数

 ssl_stream ()=default
 默认构造函数
 ssl_stream (const ssl_context &ctx)
 从SSL上下文构造
void reset (const ssl_context &ctx)
 重置SSL流
void set_fd (native_handle_type fd)
 设置底层socket文件描述符
void accept ()
 执行服务器端TLS握手
bool connect ()
 执行客户端TLS握手
void close () noexcept
 关闭SSL连接
ssize_t read (void *buffer, size_t size)
 读取加密数据
ssize_t write (const void *buffer, size_t size)
 写入加密数据
vector< char > read_all (size_t max_size=8192)
 读取所有可用数据
bool write_all (const void *data, size_t size)
 写入所有数据
int pending () const
 获取缓冲区中可读字节数
void set_sni_hostname (const string &hostname)
 设置SNI主机名(客户端)
x509_ptr get_peer_certificate () const
 获取对等方证书
bool verify_peer () const
 验证对等方证书
string get_cipher_name () const
 获取密码套件名称
string get_version () const
 获取TLS协议版本
const stringlast_error () const
 获取最后错误信息
bool is_valid () const noexcept
 检查SSL对象是否有效
 operator bool () const noexcept
 布尔转换运算符
::SSL * native_handle () const noexcept
 获取原生SSL对象指针
::SSL * release () noexcept
 释放SSL对象所有权

详细描述

SSL/TLS流封装类

提供加密通信流的接口。 需要先建立TCP连接,然后在连接上建立SSL/TLS会话。

主要功能:

  • SSL/TLS握手
  • 加密数据读写
  • 证书验证
  • SNI(服务器名称指示)支持
  • 密码套件和协议版本查询
  • 非阻塞I/O支持

在文件 ssl_stream.hpp35 行定义.

构造及析构函数说明

◆ ssl_stream() [1/2]

ssl_stream::ssl_stream ( )
default

默认构造函数

创建未初始化的SSL流对象。

◆ ssl_stream() [2/2]

ssl_stream::ssl_stream ( const ssl_context & ctx)
inlineexplicit

从SSL上下文构造

参数
ctxSSL上下文
异常
ssl_exceptionSSL对象创建失败时抛出

在文件 ssl_stream.hpp83 行定义.

引用了 reset().

成员函数说明

◆ accept()

void ssl_stream::accept ( )

执行服务器端TLS握手

异常
ssl_exception握手失败时抛出

作为服务器端接受TLS连接,执行SSL/TLS握手。 需要在set_fd()之后调用。

◆ close()

void ssl_stream::close ( )
noexcept

关闭SSL连接

发送close_notify告警,释放SSL对象。 底层的socket不会关闭,需要单独关闭。

◆ connect()

bool ssl_stream::connect ( )

执行客户端TLS握手

返回
握手成功返回true
异常
ssl_exception握手失败时抛出

作为客户端发起TLS连接,执行SSL/TLS握手。 需要在set_fd()和set_sni_hostname()(可选)之后调用。

◆ get_cipher_name()

string ssl_stream::get_cipher_name ( ) const
nodiscard

获取密码套件名称

返回
密码套件名称

返回当前TLS连接使用的密码套件名称。

引用了 get_cipher_name().

被这些函数引用 get_cipher_name().

◆ get_peer_certificate()

x509_ptr ssl_stream::get_peer_certificate ( ) const
nodiscard

获取对等方证书

返回
X509证书指针

获取TLS握手时对等方提供的证书。

引用了 get_peer_certificate().

被这些函数引用 get_peer_certificate().

◆ get_version()

string ssl_stream::get_version ( ) const
nodiscard

获取TLS协议版本

返回
协议版本字符串(如"TLSv1.2")

引用了 get_version().

被这些函数引用 get_version().

◆ is_valid()

bool ssl_stream::is_valid ( ) const
inlinenodiscardnoexcept

检查SSL对象是否有效

返回
有效返回true

在文件 ssl_stream.hpp240 行定义.

被这些函数引用 operator bool().

◆ last_error()

const string & ssl_stream::last_error ( ) const
inlinenodiscard

获取最后错误信息

返回
错误描述字符串

在文件 ssl_stream.hpp234 行定义.

引用了 last_error().

被这些函数引用 last_error().

◆ native_handle()

::SSL * ssl_stream::native_handle ( ) const
inlinenodiscardnoexcept

获取原生SSL对象指针

返回
SSL指针

在文件 ssl_stream.hpp252 行定义.

◆ operator bool()

ssl_stream::operator bool ( ) const
inlineexplicitnoexcept

布尔转换运算符

返回
有效返回true

在文件 ssl_stream.hpp246 行定义.

引用了 is_valid().

◆ pending()

int ssl_stream::pending ( ) const
nodiscard

获取缓冲区中可读字节数

返回
可读字节数

返回SSL对象内部缓冲区中已解密但未读取的字节数。

引用了 pending().

被这些函数引用 pending().

◆ read()

ssize_t ssl_stream::read ( void * buffer,
size_t size )

读取加密数据

参数
buffer接收缓冲区
size要读取的字节数
返回
实际读取的字节数,-1表示错误,0表示需要重试(非阻塞模式)

从SSL连接读取解密后的数据。 非阻塞模式下,如果没有数据可读返回0。

引用了 read() , 以及 size().

被这些函数引用 read().

◆ read_all()

vector< char > ssl_stream::read_all ( size_t max_size = 8192)

读取所有可用数据

参数
max_size最大读取字节数
返回
读取的数据
异常
ssl_exception读取失败时抛出

持续读取直到连接关闭或达到最大大小。 适用于阻塞模式下的完整响应读取。

引用了 read_all().

被这些函数引用 read_all().

◆ release()

::SSL * ssl_stream::release ( )
inlinenodiscardnoexcept

释放SSL对象所有权

返回
SSL指针

释放SSL对象的所有权,调用方负责释放。

在文件 ssl_stream.hpp260 行定义.

◆ reset()

void ssl_stream::reset ( const ssl_context & ctx)

重置SSL流

参数
ctxSSL上下文
异常
ssl_exceptionSSL对象创建失败时抛出

创建新的SSL对象并关联到指定的上下文。 如果已有SSL对象,会先关闭并释放。

被这些函数引用 ssl_stream().

◆ set_fd()

void ssl_stream::set_fd ( native_handle_type fd)

设置底层socket文件描述符

参数
fdsocket文件描述符
异常
ssl_exception设置失败时抛出
value_exception文件描述符无效时抛出

将SSL对象关联到已连接的TCP socket。 必须在握手之前调用。

◆ set_sni_hostname()

void ssl_stream::set_sni_hostname ( const string & hostname)

设置SNI主机名(客户端)

参数
hostname服务器主机名
异常
ssl_exception设置失败时抛出
value_exception主机名为空时抛出

在客户端TLS握手中设置服务器名称指示(SNI)扩展。 用于指示客户端想要连接的服务器名称。

引用了 set_sni_hostname().

被这些函数引用 set_sni_hostname().

◆ verify_peer()

bool ssl_stream::verify_peer ( ) const
nodiscard

验证对等方证书

返回
验证通过返回true

检查对等方证书是否有效(未过期、链完整、信任CA)。 需要在握手完成后调用。

引用了 verify_peer().

被这些函数引用 verify_peer().

◆ write()

ssize_t ssl_stream::write ( const void * buffer,
size_t size )

写入加密数据

参数
buffer要发送的数据
size数据大小
返回
实际写入的字节数,-1表示错误,0表示需要重试(非阻塞模式)

加密并发送数据到SSL连接。 非阻塞模式下,如果无法立即发送返回0。

引用了 size() , 以及 write().

被这些函数引用 write().

◆ write_all()

bool ssl_stream::write_all ( const void * data,
size_t size )

写入所有数据

参数
data要发送的数据
size数据大小
返回
成功返回true

持续写入直到所有数据发送完毕。 适用于阻塞模式下的完整数据发送。

引用了 data(), size() , 以及 write_all().

被这些函数引用 write_all().


该类的文档由以下文件生成: