InitializeSecurityContext

InitializeSecurityContext

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

  • InitializeSecurityContext-第一次调用返回一个指向SecBufferDesc结构的指针。
  • 调用,将(= WinSock API)函数与输出缓冲区一起发送。
  • 调用recv函数
  • 使用缓冲区再次调用InitializeSecurityContext。

  • 关于这些缓冲区的MSDN说明:



    我的问题:
  • 我需要更多解释:缓冲区的含义是什么?第二个缓冲区包含什么?他们是干什么的?
  • 在MSDN中,InitializeSecurityContext函数的TargetDataRep输入参数用于Schannel,但我看到的许多示例都将其设置为SECURITY_NATIVE_DREP。什么是SECURITY_NATIVE_DREP标志? MSDN为什么说将其设置为零?

  • 我将非常感谢您的帮助。
    谢谢!。

    最佳答案

    1. SChannel为您提供了一层抽象,以便能够通过安全 channel 传输数据缓冲区。 API的设计方式是,当您发送一条数据时,您将提供两个数据缓冲区-实际数据(有效负载)和第二个缓冲区,其中包含安全 channel token /上下文。假设您会将这个缓冲区附加到要推送的每个有效负载缓冲区,例如因为未设计API,因此内部保留并管理此数据,例如带手柄。
    2. InitializeSecurityContext不仅适用于SChannel包,在其他情况下,使用此参数,并且示例代码可能使您有机会查看与其他包相关的内容,或者从那里复制了内容,或者将它们应用于两者。

    10-04 21:05