fbr*_*eau 6 windows winapi sspi schannel dtls
我正在尝试在 Windows 下使用 Schannel 创建 DTLS“连接”(我正在最近的 Windows 10 版本下进行测试,因此 Schannel 支持的所有 DTLS 版本都应该可用)
我尝试从工作代码开始,按照文档建立常规 TLS 连接:
这在流模式下工作得很好(ISC_REQ_SEQUENCE_DETECT | ISC_REQ_REPLAY_DETECT | ISC_REQ_CONFIDENTIALITY | ISC_RET_EXTENDED_ERROR | ISC_REQ_ALLOCATE_MEMORY | ISC_REQ_STREAM)
如果我尝试用 ISC/ASC_REQ_DATAGRAM 替换 STREAM,我的 InitializeSecurityContext 将按预期成功,并显示 SEC_I_CONTINUE_NEEDED,但我的第一个 AcceptSecurityContext 然后会失败,并显示 SEC_E_INVALID_PARAMETER。
我尝试将 SCHANNEL_CRED 的 grbitEnabledProtocols 设置为 0 以使用双方记录的默认值,我还尝试将其设置为 SP_PROT_DTLS1_X,但我仍然从第一个 ASC 返回无效参数。我还尝试了 DTLS_1_0 常量以防万一。
此外,我的注册表设置中默认启用所有安全协议。
根据我对 DTLS RFC 的理解,我的代码在 HelloVerifyRequest 步骤失败,并且,再次根据我对 RFC 的理解,这部分要求安全提供程序从 ClientHello 消息的几个部分以及源的IP地址。但是,我找不到任何记录的方法将此信息传递给 ASC 函数。
(我认为?:))我在整个互联网上搜索了 Schannel 下 DTLS 的任何工作示例用法,但没有任何运气。在 stackoverflow 上,我发现这个问题只是提到它受支持: Is DTLS support by Schannel on Windows 7? ,链接的 MSDN 文章只是一个高级概述。
我搜索了与此功能相关的常量的任何用法...我搜索了与此相关的常量的任何用法(ISC_REQ_DATAGRAM、SP_PROT_DTLS*、SECBUFFER_DTLS_MTU,...)以及我唯一能找到的东西我能想到的所有搜索引擎要么是 sspi.h 的副本,要么是在 Windows API 中索引常量的站点...
我知道 DTLS 得到了其他实现(OpenSSL 等)的良好支持,但我真的更愿意继续使用 Schannel,因为我的代码的其他部分目前在 TLS 模式下与 Schannel 配合得很好。
小智 5
来自微软: \n没有使用 Schannel 实现 DTLS 的文档。已知且持续的文档差距。
\n虽然存在一些差异,但 TLS 客户端或服务器可以相当轻松地适应 DTLS(许多客户已经成功做到了这一点)。
\n| 归档时间: |
|
| 查看次数: |
1194 次 |
| 最近记录: |