调用DecryptMessage后SECBUFFER_EXTRA指向SECBUFFER_STREAM_TRAILER内部的原因
Windows 7 SP1 TLS 1.2 DecryptMessage 流尾部与额外缓冲区异常问题
环境配置
- 客户端:Windows 7 SP1虚拟机,已安装对应补丁并配置注册表启用TLS 1.2通信
- 服务器:Windows Server 2019 Datacenter虚拟机
- 经
QueryContextAttributes确认:- 已成功建立TLS 1.2会话
- 协商的流尾部(stream trailer)大小为48字节
异常表现
调用DecryptMessage时传入1个SECBUFFER_DATA和3个SECBUFFER_EMPTY缓冲区,输出缓冲区包含SECBUFFER_STREAM_HEADER、SECBUFFER_DATA、SECBUFFER_STREAM_TRAILER和SECBUFFER_EXTRA:
SECBUFFER_STREAM_TRAILER的实际大小总是小于协商值,比如协商为48字节时,实际仅为45字节SECBUFFER_EXTRA指向SECBUFFER_STREAM_TRAILER缓冲区起始位置+实际尾部大小的位置,其大小为协商值与实际值的差值(示例中为3字节)
从技术规范看该行为合法(SECBUFFER_EXTRA仅标识DecryptMessage未消耗的数据),但安全提供商将这些字节标记为“额外数据”、或消息包未使用完整协商的流尾部大小的表现仍不符合预期。
临时解决方法
通过判断SECBUFFER_EXTRA是否处于协商的流尾部块范围内,若存在则将指针跳过这些字节,可实现正常数据处理。
版本差异验证
当客户端与服务器均使用Windows 7之后的操作系统(已测试Windows Server 2012 R2 Standard、Windows Server 2019 Datacenter、Windows 10)时,不会出现此异常。
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

