我必须使用 SSPI 接口实现 TLS 握手过程。
我的应用程序实现了客户端,正如我从这里看到的一般流程是:
- InitializeSecurityContext - 第一次调用返回一个指向 SecBufferDesc 结构的指针。
- 使用输出缓冲区调用发送(=WinSock API) 函数。
- 调用recv函数
- 使用缓冲区再次调用 InitializeSecurityContext。
关于这些缓冲区的MSDN解释:
“在初始调用后调用此函数时,必须有两个缓冲区。第一个缓冲区的类型为 SECBUFFER_TOKEN,包含从服务器接收到的令牌。第二个缓冲区的类型为 SECBUFFER_EMPTY;将 pvBuffer 和 cbBuffer 成员都设置为零。”
我的问题:
- 我需要更多解释:缓冲区的含义是什么?第二个缓冲区包含什么?它们是干什么用的?
- 在 MSDN 中写到 InitializeSecurityContext 函数的 TargetDataRep 输入参数是用于 Schannel 的坚果,但我看到的许多示例将其设置为 SECURITY_NATIVE_DREP。什么是 SECURITY_NATIVE_DREP 标志?为什么 MSDN 说将其设置为零?
我将非常感谢任何帮助。
谢谢!。