gpt4 book ai didi

c++ - InitializeSecurityContext (Schannel) 的 TLS 握手过程

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:48 27 4
gpt4 key购买 nike

我必须使用 SSPI 接口(interface)实现 TLS 握手过程。
我的应用程序实现了客户端,正如我从 here 中看到的那样一般流程是:

  1. InitializeSecurityContext - 第一次调用返回指向 SecBufferDesc 结构的指针。
  2. 使用输出缓冲区调用发送( =WinSock API) 函数。
  3. 调用 recv 函数
  4. 使用缓冲区再次调用 InitializeSecurityContext。

MSDN关于这些缓冲区的解释:

"On calls to this function after the initial call, there must be two buffers. The first has type SECBUFFER_TOKEN and contains the token received from the server. The second buffer has type SECBUFFER_EMPTY; set both the pvBuffer and cbBuffer members to zero."

我的问题:

  1. 我需要更多解释:缓冲区的含义是什么?第二个缓冲区包含什么?他们有什么用?
  2. 在 MSDN 中写道,InitializeSecurityContext 函数的 TargetDataRep 输入参数是用于 Schannel 的螺母,但我看到的许多样本都将其设置为 SECURITY_NATIVE_DREP。什么是 SECURITY_NATIVE_DREP 标志?为什么 MSDN 说要将其设置为零?

我将非常感谢任何帮助。
谢谢!。

最佳答案

1. SChannel 为您提供一个抽象层,以便能够通过安全通道传输数据缓冲区。 API 的设计方式是,当您发送一段数据时,您会提供两个数据缓冲区 - 实际数据(有效负载)和保存安全通道 token /上下文的第二个缓冲区。假设您将把这个缓冲区附加到您正在推送的每个有效载荷缓冲区,例如因为 API 未设计为在内部保留和管理此数据,例如带 Handlebars 。

2. InitializeSecurityContext 不仅适用于 SChannel 包,在其他情况下也会使用此参数,也许您有机会看到与不同包相关的示例代码,或从那里复制或适用于两者。

关于c++ - InitializeSecurityContext (Schannel) 的 TLS 握手过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9973970/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com