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