InitializeSecurityContext(Schannel)的TLS握手过程
TLS Handshake process by InitializeSecurityContext (Schannel)
我必须使用SSPI接口实现TLS握手过程
我的应用程序实现了客户端,正如我从这里看到的,一般流程是:
- InitializeSecurityContext-第一个调用返回指向SecBufferDesc结构的指针
- 调用带有输出缓冲区的send(=WinSock API)函数
- 调用recv函数
- 使用缓冲区再次调用InitializeSecurityContext
MSDN对这些缓冲区的解释:
"在初始调用之后调用此函数时,必须有两个缓冲区。第一个具有SECBUFFER_TOKEN类型,并包含令牌从服务器接收。第二缓冲器具有类型SECBUFFER_EMPTY;将pvBuffer和cbBuffer成员都设置为零。"
我的问题:
- 我需要更多的解释:缓冲区的含义是什么?第二个缓冲区包含什么?它们是干什么的
- 在MSDN中,InitializeSecurityContext函数的TargetDataRep输入参数被用于Schannel,但我看到的许多示例都将其设置为SECURITY_NAMETIVE_DREP。什么是SECURITY_NAMETIVE_DREP标志?MSDN为什么说要将其设置为零
我真的很感激任何帮助
谢谢
1.
SChannel为您提供了一层抽象层,使您能够通过安全通道传输数据缓冲区。API的设计方式是,当您发送一段数据时,您提供两个数据缓冲区-实际数据(有效负载)和第二个保存安全通道令牌/上下文的缓冲区。假设您将把这个缓冲区附加到您推送的每个有效负载缓冲区,例如,因为API没有设计在内部保存和管理这个数据,例如使用句柄。
2.
InitializeSecurityContext
不仅适用于SChannel包,在其他情况下,会使用此参数,也许您有机会查看与不同包相关的示例代码,或者从那里复制或同时适用于两者。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 是否删除在对象构造过程中创建的对象
- OpenSSL TLS服务器-使用客户端证书白名单
- 如何在鼠标挂钩过程中检测拖动
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- clang 插件:在编译过程中修改 AST
- Websocket++ 错误:收到错误handle_transport_init TLS 握手失败
- 如何使变量从 x 到 y,然后从 y 返回到 x 并始终重复该过程
- 在C++中调用 MS SQL 存储过程
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- GRPC C++ TLS 客户端 grpc::SslCredentials() 方法不返回
- 阻塞信号会导致升压过程不起作用
- OpenSSL C API:如何在程序exec()之后恢复TLS连接?
- Adafruit 羽毛RFM69HCW在使用过程中会冻结,需要硬重置
- 使用提升过程获取 shell 命令的标准输出
- 附加到 gdb 会中断并且不会继续该过程
- 如何创建始终在线的过程?
- 来自带有mbedtls TLS的Mongoose Web服务器的错误消息
- 使用 Qt 测量过程的实际运行时间
- InitializeSecurityContext(Schannel)的TLS握手过程