接收者展开或检验所传送的消息之后,会向发送者返回确认信息,这意味着会发回该消息的 MIC。请考虑以下情况:消息没有由发送者进行包装,而只是通过 gss_get_mic() 使用 MIC 进行了标记。图 4–9 中说明的过程如下所示:
启动器使用 gss_get_mic() 对消息进行标记。
启动器将该消息和 MIC 发送到接受器。
接受器使用 gss_verify_mic() 检验该消息。
接受器将该 MIC 发回到启动器。
启动器使用 gss_verify_mic() 来针对原始消息检验所收到的 MIC。
对于已包装的数据,gss_unwrap() 函数从不生成单独的 MIC,因此,接收者必须根据所收到的未包装的消息生成它。图 4–10 中说明的过程如下所示:
启动器使用 gss_wrap() 包装消息。
启动器发送已包装的消息。
接受器使用 gss_unwrap() 展开该消息。
接受器调用 gss_get_mic() 以生成未包装的消息的 MIC。
接受器将派生的 MIC 发送到启动器。
启动器使用 gss_verify_mic() 将所收到的 MIC 与原始消息进行比较。
对于已经为 GSS-API 数据分配的任何数据空间,应用程序应当解除对其进行分配。相关函数包括 gss_release_buffer(3GSS)、gss_release_cred(3GSS)、gss_release_name(3GSS) 和 gss_release_oid_set(3GSS)。