我试图在Windows下使用Schannel创建一个DTLS“连接”(我正在最近的Windows 10版本下进行测试,因此Schannel支持的所有DTLS版本都是可用的)
我尝试从工作代码开始,通过以下文档建立一个常规的TLS连接:
在流模式下,这是非常好的工作方式(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模式下工作得很好。
发布于 2021-01-22 21:31:07
微软的:没有使用实现DTLS的文档。已知的和持续的医生间隙。
有一些不同之处,但是TLS客户端或服务器可以很容易地适应DTLS (许多客户已经成功地做到了这一点)。
发布于 2021-02-06 14:12:07
您可以使用https://github.com/mobius-software-ltd/iotbroker.cloud-windows-client作为示例在windows上实现DTLS,它不使用SChannel,而是使用netty库。MQTT和CoAP均支持本项目下的DTLS .布尔玉莲油
https://stackoverflow.com/questions/47678618
复制相似问题