企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
SSL组件在启动通信前需要初始化SSL环境参数,通信完毕时需要清理SSL运行环境。HP-Socket v4.x.x及其之前的版本使用全局唯一SSL运行环境,所有SSL组件都共享该环境,并通过HP_SSL_Initialize() / HP_SSL_AddServerContext() / HP_SSL_Cleanup() / HP_SSL_IsValid() 等全局函数操作该全局SSL环境,HP-Socket v5.0.x版本开始,每个SSL组件使用独立的SSL运行环境,因此上述函数已被删除。取而代之,SSL组件提供相应的实例方法来操作自身的SSL运行环境: **初始化SSL环境参数:** ~~~ BOOL SetupSSLContext(enSessionMode, iVerifyMode = SSL_VM_NONE, lpszPemCertFile = nullptr, lpszPemKeyFile = nullptr, lpszKeyPasswod = nullptr, lpszCAPemCertFileOrPath = nullptr, [fnServerNameCallback = nullptr]) ~~~ * * * * * 参数iVerifyMode指定SSL验证模式;参数lpszPemCertFile、lpszPemKeyFile、lpszKeyPasswod和lpszCAPemCertFileOrPath分别指定证书文件、私钥文件、私钥密码和CA证书文件/目录;参数fnServerNameCallback指定SNI回调函数指针,该参数只用于HTTPS服务端。参数详细说明请参考Src/HPSocket-SSL.h或Src/HPSocket4C-SSL.h头文件。初始化成功返回TRUE,失败返回FALSE,初始化失败可通过SYS_GetLastError() 获取错误代码。 **增加SNI主机证书(SSL Server组件):** ~~~ int AddSSLContext (iVerifyMode, lpszPemCertFile, lpszPemKeyFile, lpszKeyPasswod = nullptr, lpszCAPemCertFileOrPath = nullptr) ~~~ 仅用于SSL Server组件。参数iVerifyMode指定SSL验证模式;参数lpszPemCertFile、lpszPemKeyFile、lpszKeyPasswod和lpszCAPemCertFileOrPath分别指定证书文件、私钥文件、私钥密码和CA证书文件/目录。执行成功返回 SNI 主机证书对应的索引,该索引用于在 SNI 回调函数中定位 SNI 主机;失败返回-1,可通过SYS_GetLastError() 获取错误代码。 > **注意:应用程序一般在初始化SSL运行环境时调用AddSSLContext()加载所有SNI主机证书,但一些特殊应用可能要动态加载SNI主机证书,此时需要对调用 AddSSLContext()的代码段进行同步处理,避免重复加载相同证书。** > **清理SSL环境:** ~~~ void CleanupSSLContext() ~~~ 组件停止通信(调用Stop())时会自动清理SSL环境,因此,应用程序只需调用SetupSSLContext() 初始化组件的SSL环境参数,而不需要手工调用本函数。 **清理线程局部SSL环境资源(全局函数):** ~~~ void HP_SSL_RemoveThreadLocalState() ~~~ 任何一个操作SSL的线程,在退出时都需要清理线程的局部环境SSL资源,主线程和HP-Socket工作线程在通信结束时会自动清理线程局部环境SSL资源。因此,一般情况下不必手工调用本函数;特殊情况下,当自定义线程参与HP-Socket通信操作(如:通信组件发送策略为SP_DIRECT并且该自定义线程调用了Send() 方法发送数据)并检查到SSL内存泄漏时,需在每次停止组件时在该自定义线程调用本函数。