首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Schannel的DTLS

使用Schannel的DTLS
EN

Stack Overflow用户
提问于 2017-12-06 16:04:27
回答 2查看 940关注 0票数 6

我试图在Windows下使用Schannel创建一个DTLS“连接”(我正在最近的Windows 10版本下进行测试,因此Schannel支持的所有DTLS版本都是可用的)

我尝试从工作代码开始,通过以下文档建立一个常规的TLS连接:

  1. 第一次输入为空的InitializeSecurityContext,输出时的SECBUFFER_TOKEN和SECBUFFER_ALERT
  2. AcceptSecurityContext和SECBUFFER_TOKEN & SECBUFFER_EMPTY在输入,SECBUFFER_TOKEN和SECBUFFER_ALERT在输出。
  3. 重复这两个步骤,直到它们成功为止,然后继续使用加密/解密消息

在流模式下,这是非常好的工作方式(ISC_REQ_SEQUENCE_DETECT _ ISC_REQ_REPLAY_DETECT _(ISC_REQ_SEQUENCE_DETECT_

如果我尝试用ISC/ASC_REQ_DATAGRAM替代流,我的InitializeSecurityContext就会像预期的那样用SEC_I_CONTINUE_NEEDED成功,但是我的第一个AcceptSecurityContext就会在SEC_E_INVALID_PARAMETER中失败。

我尝试将我的grbitEnabledProtocols的SCHANNEL_CRED设置为0,以使用双方记录的默认设置,我还尝试将其设置为SP_PROT_DTLS1_X,并且仍然从我的第一个ASC获得无效的参数返回。为了以防万一,我也尝试了DTLS_1_0常量。

此外,默认情况下,在我的注册表设置中启用了所有安全协议。

根据我对DTLS的理解,我的代码在HelloVerifyRequest步骤中失败了,而且根据我对RFC的理解,这部分要求安全提供者从ClientHello消息的几个部分以及源的IP地址生成一个cookie。但是,我找不到任何有文档的方法将这些信息传递给ASC函数。

(我想?:)我已经在整个互联网上搜索了在Schannel下使用DTLS的任何工作示例,没有任何运气。关于堆栈溢出,我发现这个问题只是简单地提到了它是支持的:Is DTLS supported by Schannel on Windows 7?,而链接的MSDN文章只是一个高级别的概述。

我搜索与此特性相关的常量的任何用法.我搜索了与此相关的常量的任何用法(ISC_REQ_DATAGRAM、SP_PROT_DTLS*、SECBUFFER_DTLS_MTU、.)我能想到的所有搜索引擎中唯一能找到的就是sspi.h的拷贝或者索引Windows中常量的站点.

我知道DTLS很受其他实现(OpenSSL等)的支持,但我确实更喜欢使用Schannel,因为我的代码的其他部分目前在TLS模式下工作得很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-22 21:31:07

微软的没有使用实现DTLS的文档。已知的和持续的医生间隙。

有一些不同之处,但是TLS客户端或服务器可以很容易地适应DTLS (许多客户已经成功地做到了这一点)。

  1. 将SCHANNEL_CRED.grbitEnabledProtocols设置为SP_PROT_DTLS1_X。
  2. 调用AcceptSecurityContext时,通过SECBUFFER_EXTRA传递客户端的SOCKADDR。
  3. 可以通过SetContextAttributes使用常量SECPKG_ATTR_DTLS_MTU来设置MTU,其中缓冲区只是指向ULONG的指针。默认值为1096字节。
  4. 当ISC/ASC返回SEC_I_MESSAGE_FRAGMENT时,发送这个片段并在循环中再次调用ISC/ASC,以获得下一个片段(而不尝试从网络读取数据)。
  5. 在应用程序中实现超时和重传逻辑(因为schannel不拥有套接字)。
  6. 当接收片段时,schannel将尝试消除重复,重新排序和重新组装,如果可能的话.
  7. SCHANNEL_SHUTDOWN不适用于DTLS。
票数 5
EN

Stack Overflow用户

发布于 2021-02-06 14:12:07

您可以使用https://github.com/mobius-software-ltd/iotbroker.cloud-windows-client作为示例在windows上实现DTLS,它不使用SChannel,而是使用netty库。MQTT和CoAP均支持本项目下的DTLS .布尔玉莲油

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47678618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档