Solaris 开发者安全性指南

在 GSS-API 中导出和导入上下文

GSS-API 提供了用于导出和导入上下文的方法。此方法允许多进程应用程序(通常是上下文接受器)在进程之间传送上下文。例如,接受器可以有两个进程,一个进程侦听上下文启动器,另一个进程使用在上下文中发送的数据。使用 test_import_export_context() 函数一节说明了如何使用这些函数来保存和恢复上下文。

gss_export_sec_context() 函数可创建进程间令牌,其中包含有关所导出上下文的信息。有关更多信息,请参见GSS-API 中的进程间令牌。调用 gss_export_sec_context() 之前,应当将接收令牌的缓冲区设置为 GSS_C_NO_BUFFER

应用程序随后会将令牌传递到另一个进程。新进程将接受该令牌并将其传递到 gss_import_sec_context()。用于在应用程序之间传递令牌的函数通常也可用于在进程之间传递令牌。

一次只能存在一个安全进程实例。gss_export_sec_context() 可取消激活所导出的上下文并将上下文句柄设置为 GSS_C_NO_CONTEXTgss_export_sec_context() 还可解除配置与该上下文相关联的任何进程范围内的资源。如果无法完成对上下文的导出,gss_export_sec_context() 会保持现有的安全上下文不变,并且不返回进程间令牌。

并非所有机制都允许导出上下文。应用程序可以通过检查 gss_accept_sec_context()gss_init_sec_context()ret_flags 参数来确定上下文是否可以导出。如果此标志设置为 GSS_C_TRANS_FLAG,则可以导出上下文。(请参见在 GSS-API 中接受上下文在 GSS-API 中启动上下文。)

图 4–6 说明多进程接受器如何将上下文导出到多个任务。在这种情况下,进程 1 接收和处理令牌。此步骤会将上下文级别的令牌与数据令牌分开,并将令牌传递到进程 2。进程 2 按照应用程序特定的方式处理数据。在该图中,客户机已经从 gss_init_sec_context() 获取了导出令牌。客户机将令牌传递到用户定义的函数 send_a_token(),该函数指示要传送的令牌是上下文级别的令牌还是消息令牌。send_a_token() 将这些令牌传送到服务器。send_a_token() 可能会用于在线程之间传递令牌,但是该图中未显示这一点。

图 4–6 导出上下文:多线程接受器示例

该图说明了多进程接受器如何将上下文令牌和数据令牌分开并将上下文令牌传递到另一个进程。