跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris 开发者安全性指南 Oracle Solaris 10 8/11 Information Library (简体中文) |
现在,gss-client 程序可以测试已发送消息的有效性。服务器会针对已发送的消息返回 MIC。可以通过 recv_token() 检索此消息。
然后,使用 gss_verify_mic() 函数验证消息的签名(即 MIC)。gss_verify_mic() 用于将收到的 MIC 与未包装的原始消息进行比较。收到的 MIC 来自服务器的令牌,该令牌存储在 out_buf 中。来自未包装版本的消息的 MIC 存放在 in_buf 中。如果这两个 MIC 匹配,系统便会验证此消息。客户机随后会为所收到的令牌释放缓冲区 out_buf。
以下源代码说明了读取和验证签名块的过程。
注 - 此示例的源代码也可以通过 Oracle 下载中心获取。请参见 https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_SMI-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=Security_code-Dev1.1-G-F@CDS-CDS_SMI。
示例 5-7 gss-client 示例-读取和验证签名块
/* Read signature block into out_buf */ if (recv_token(s, &out_buf) < 0) { (void) close(s); (void) gss_delete_sec_context(&min_stat, &context, GSS_C_NO_BUFFER); return -1; } /* Verify signature block */ maj_stat = gss_(&min_stat, context, &in_buf, &out_buf, &qop_state); if (maj_stat != GSS_S_COMPLETE) { display_status("verifying signature", maj_stat, min_stat); (void) close(s); (void) gss_delete_sec_context(&min_stat, &context, GSS_C_NO_BUFFER); return -1; } (void) gss_release_buffer(&min_stat, &out_buf); if (use_file) free(in_buf.value); printf("Signature verified.\n");