![从 2012 R2 开始,TLS 1.2 客户端 hello 会触发 TCP 重置](https://linux22.com/image/682257/%E4%BB%8E%202012%20R2%20%E5%BC%80%E5%A7%8B%EF%BC%8CTLS%201.2%20%E5%AE%A2%E6%88%B7%E7%AB%AF%20hello%20%E4%BC%9A%E8%A7%A6%E5%8F%91%20TCP%20%E9%87%8D%E7%BD%AE.png)
在我的实验室(ADCS 2012 R2)中,PKI 实施遇到了困难,我无论如何也想不出哪里出了问题。
一直到能够为 IIS 服务器生成 SSL/TLS 证书并进行绑定为止。还使用了 NARTAC 工具关闭 SSLv2/3 + 启用 TLS 1.0-1.2。使用 testssl.sh,我可以验证 SSL 是否已禁用,并且可以获得 TLS 1.0 和 1.1 的握手,但每次收到 TLS 1.2 的客户端 hello 时,服务器都会发送 TCP 重置。系统日志显示与重置相对应的一对 SCHANNEL 36874 和 36888 错误 ID。错误 36874 表明客户端 hello 正在提供服务器不支持的密码套件。
这是我遇到的难题,我在网上搜索了无数次,但都没有找到答案。我几乎可以肯定,我忽略了一些显而易见的东西。然而,沮丧的眼光却让我看不到它。
有什么想法吗?
客户端问候详细信息:
帧 136:线路上有 377 个字节(3016 位),在接口 0 以太网 II 上捕获了 377 个字节(3016 位),来源:CiscoInc_07:be:7f(fc:5b:39:07:be:7f),目标:Vmware_01:02:14(00:50:56:01:02:14)Internet 协议版本 4,来源:192.168.6.75,目标:10.22.163.219 传输控制协议,来源端口:35836(35836),目标端口:443(443),序号:1,确认:1,长度:311 安全套接字层 SSL 记录层:握手协议:客户端 Hello 内容类型:握手(22)版本:TLS 1.0(0x0301)长度:306 握手协议:客户端 Hello 握手类型:客户端 Hello (1) 长度:302 版本:TLS 1.2 (0x0303) 随机会话 ID 长度:0 密码套件长度:176 密码套件 (88 套件) 密码套件:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) 密码套件:TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (0xc02c) 密码套件:TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028) 密码套件:TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 (0xc024) 密码套件: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014) 密码套件:TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a) 密码套件:TLS_DH_DSS_WITH_AES_256_GCM_SHA384 (0x00a5) 密码套件:TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 (0x00a3) 密码套件:TLS_DH_RSA_WITH_AES_256_GCM_SHA384 (0x00a1) 密码套件:TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x009f) 密码套件: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (0x006b) 密码套件:TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 (0x006a) 密码套件:TLS_DH_RSA_WITH_AES_256_CBC_SHA256 (0x0069) 密码套件:TLS_DH_DSS_WITH_AES_256_CBC_SHA256 (0x0068) 密码套件:TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x0039) 密码套件:TLS_DHE_DSS_WITH_AES_256_CBC_SHA (0x0038) 密码套件:TLS_DH_RSA_WITH_AES_256_CBC_SHA (0x0037)密码套件:TLS_DH_DSS_WITH_AES_256_CBC_SHA (0x0036)密码套件:TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (0x0088)密码套件:TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA (0x0087)密码套件:TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA (0x0086)密码套件:TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA (0x0085)密码套件:TLS_GOSTR341001_WITH_28147_CNT_IMIT (0x0081)密码套件: TLS_GOSTR341094_WITH_28147_CNT_IMIT (0x0080) 密码套件:TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 (0xc032) 密码套件:TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 (0xc02e) 密码套件:TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 (0xc02a) 密码套件:TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 (0xc026) 密码套件:TLS_ECDH_RSA_WITH_AES_256_CBC_SHA (0xc00f) 密码套件:TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA (0xc005) 密码套件:TLS_RSA_WITH_AES_256_GCM_SHA384 (0x009d) 密码套件:TLS_RSA_WITH_AES_256_CBC_SHA256 (0x003d) 密码套件:TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)密码套件:TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (0x0084)密码套件:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)密码套件:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)密码套件:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027)密码套件:TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (0xc023)密码套件:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)密码套件: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009) 密码套件:TLS_DH_DSS_WITH_AES_128_GCM_SHA256 (0x00a4) 密码套件:TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 (0x00a2) 密码套件:TLS_DH_RSA_WITH_AES_128_GCM_SHA256 (0x00a0) 密码套件:TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x009e) 密码套件:TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (0x0067) 密码套件: TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 (0x0040) 密码套件:TLS_DH_RSA_WITH_AES_128_CBC_SHA256 (0x003f) 密码套件:TLS_DH_DSS_WITH_AES_128_CBC_SHA256 (0x003e) 密码套件:TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x0033) 密码套件:TLS_DHE_DSS_WITH_AES_128_CBC_SHA (0x0032) 密码套件:TLS_DH_RSA_WITH_AES_128_CBC_SHA (0x0031) 密码套件:TLS_DH_DSS_WITH_AES_128_CBC_SHA (0x0030)密码套件:TLS_DHE_RSA_WITH_SEED_CBC_SHA (0x009a)密码套件:TLS_DHE_DSS_WITH_SEED_CBC_SHA (0x0099)密码套件:TLS_DH_RSA_WITH_SEED_CBC_SHA (0x0098)密码套件:TLS_DH_DSS_WITH_SEED_CBC_SHA (0x0097)密码套件:TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (0x0045)密码套件:TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA (0x0044)密码套件:TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA (0x0043)密码套件: TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA (0x0042) 密码套件:TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 (0xc031) 密码套件:TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02d) 密码套件:TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 (0xc029) 密码套件:TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 (0xc025) 密码套件:TLS_ECDH_RSA_WITH_AES_128_CBC_SHA (0xc00e) 密码套件:TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA (0xc004) 密码套件:TLS_RSA_WITH_AES_128_GCM_SHA256 (0x009c) 密码套件:TLS_RSA_WITH_AES_128_CBC_SHA256 (0x003c) 密码套件:TLS_RSA_WITH_AES_128_CBC_SHA (0x002f) 密码套件:TLS_RSA_WITH_SEED_CBC_SHA (0x0096) 密码套件:TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (0x0041) 密码套件: TLS_RSA_WITH_IDEA_CBC_SHA (0x0007) 密码套件:TLS_ECDHE_RSA_WITH_RC4_128_SHA (0xc011) 密码套件:TLS_ECDHE_ECDSA_WITH_RC4_128_SHA (0xc007) 密码套件:TLS_ECDH_RSA_WITH_RC4_128_SHA (0xc00c) 密码套件:TLS_ECDH_ECDSA_WITH_RC4_128_SHA (0xc002) 密码套件:TLS_RSA_WITH_RC4_128_SHA (0x0005) 密码套件:TLS_RSA_WITH_RC4_128_MD5 (0x0004) 密码套件:TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (0xc012)密码套件:TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA (0xc008)密码套件:TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (0x0016)密码套件:TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA (0x0013)密码套件:TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA (0x0010)密码套件:TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA (0x000d)密码套件:TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA (0xc00d)密码套件:TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA (0xc003) 密码套件:TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000a) 密码套件:TLS_EMPTY_RENEGOTIATION_INFO_SCSV (0x00ff) 压缩方法长度:1 压缩方法(1 种方法)扩展长度:85 扩展:ec_point_formats 扩展:elliptic_curves 扩展:SessionTicket TLS 扩展:signature_algorithms 类型:signature_algorithms (0x000d) 长度:32 签名哈希算法长度:30 签名哈希算法(15 种算法)扩展:HeartbeatTLS_ECDHE_ECDSA_WITH_RC4_128_SHA (0xc007) 密码套件:TLS_ECDH_RSA_WITH_RC4_128_SHA (0xc00c) 密码套件:TLS_ECDH_ECDSA_WITH_RC4_128_SHA (0xc002) 密码套件:TLS_RSA_WITH_RC4_128_SHA (0x0005) 密码套件:TLS_RSA_WITH_RC4_128_MD5 (0x0004) 密码套件:TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (0xc012) 密码套件:TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA (0xc008) 密码套件: TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (0x0016) 密码套件:TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA (0x0013) 密码套件:TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA (0x0010) 密码套件:TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA (0x000d) 密码套件:TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA (0xc00d) 密码套件:TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA (0xc003) 密码套件:TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000a) 密码套件: TLS_EMPTY_RENEGOTIATION_INFO_SCSV (0x00ff) 压缩方法 长度:1 压缩方法(1 种方法) 扩展 长度:85 扩展:ec_point_formats 扩展:elliptic_curves 扩展:SessionTicket TLS 扩展:signature_algorithms 类型:signature_algorithms (0x000d) 长度:32 签名哈希算法 长度:30 签名哈希算法(15 种算法) 扩展:HeartbeatTLS_ECDHE_ECDSA_WITH_RC4_128_SHA (0xc007) 密码套件:TLS_ECDH_RSA_WITH_RC4_128_SHA (0xc00c) 密码套件:TLS_ECDH_ECDSA_WITH_RC4_128_SHA (0xc002) 密码套件:TLS_RSA_WITH_RC4_128_SHA (0x0005) 密码套件:TLS_RSA_WITH_RC4_128_MD5 (0x0004) 密码套件:TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (0xc012) 密码套件:TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA (0xc008) 密码套件: TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (0x0016) 密码套件:TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA (0x0013) 密码套件:TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA (0x0010) 密码套件:TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA (0x000d) 密码套件:TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA (0xc00d) 密码套件:TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA (0xc003) 密码套件:TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000a) 密码套件: TLS_EMPTY_RENEGOTIATION_INFO_SCSV (0x00ff) 压缩方法 长度:1 压缩方法(1 种方法) 扩展 长度:85 扩展:ec_point_formats 扩展:elliptic_curves 扩展:SessionTicket TLS 扩展:signature_algorithms 类型:signature_algorithms (0x000d) 长度:32 签名哈希算法 长度:30 签名哈希算法(15 种算法) 扩展:HeartbeatSessionTicket TLS 扩展:签名算法 类型:签名算法 (0x000d) 长度:32 签名哈希算法 长度:30 签名哈希算法 (15 种算法) 扩展:心跳SessionTicket TLS 扩展:signature_algorithms 类型:signature_algorithms (0x000d) 长度:32 签名哈希算法 长度:30 签名哈希算法 (15 种算法) 扩展:心跳
TCP 重置:
137 2.086290 10.22.163.219 192.168.6.75 TCP 54 443 → 35836 [RST,ACK] Seq=1 Ack=312 Win=0 Len=0 帧 137:线路上有 54 个字节(432 位),在接口 0 以太网 II 上捕获了 54 个字节(432 位),来源:Vmware_01:02:14(00:50:56:01:02:14),目标:IETF-VRRP-VRID_19(00:00:5e:00:01:19)Internet 协议版本 4,来源:10.22.163.219,目标:192.168.6.75 传输控制协议,来源端口:443(443),目标端口:35836 (35836),Seq:1,Ack:312,Len:0 源端口:443 目标端口:35836 [流索引:3] [TCP 段长度:0] 序列号:1(相对序列号) 确认号:312(相对确认号) 标头长度:20 字节 标志:0x014(RST,ACK) 窗口大小值:0 [计算的窗口大小:0] [窗口大小缩放因子:256] 校验和:0x74ff [验证已禁用] 紧急指针:0 [SEQ/ACK 分析]
频道 36874
日志名称:系统 来源:Schannel 日期:2016 年 5 月 4 日上午 9:48:36 事件 ID:36874 任务类别:无 级别:
错误 关键字:用户:SYSTEM 计算机:
OCSP.corp.contoso.com 描述:从远程客户端应用程序收到 TLS 1.2 连接请求,但客户端应用程序支持的任何密码套件均不受服务器支持。SSL 连接请求失败。
频道 36888:
日志名称:系统 来源:Schannel 日期:2016 年 5 月 4 日上午 9:48:36 事件 ID:36888 任务类别:无 级别:
错误 关键字:用户:SYSTEM 计算机:
OCSP.corp.contoso.com 描述:生成致命警报并发送到远程端点。这可能会导致连接终止。TLS 协议定义的致命错误代码为 40。Windows SChannel 错误状态为 1205。
编辑1
我发现我可以成功让未加入域的 2012 R2 IIS 服务器响应 TLS 1.2 hello 数据包。所以我的问题似乎与加入域的系统有关。仍然没有解决方程的这一部分。
答案1
某些密码似乎存在互操作性问题。我们也遇到了同样的问题。我们发现有问题的密码是:
- TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x009f)
- TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x009e)
- TLS_RSA_WITH_AES_256_GCM_SHA384 (0x009d)
- TLS_RSA_WITH_AES_128_GCM_SHA256 (0x009c)
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x0033)
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x0039)
另请参阅这些链接。
答案2
如果问题是加入域的计算机无法连接(我假设连接客户端是 Windows 本身、IE 或使用 Windows 中本机 SChannel 的其他组件),那么我会怀疑您没有在客户端上启用 TLS 1.2。作为加入域的计算机,这意味着您有一个 GPO 管理模板,用于配置协议和密码套件并将它们推送到客户端。
我推荐几个可以追踪的事物。
我假设您提到的“Nartac 工具”是指 IISCrypto。在客户端和服务器上运行它,查看启用了哪些协议和密码 - 确保有重叠。
此外,对这些项目的任何更改都需要重新启动。是的,这可能是显而易见的,但必须说出来。
接下来,获取 Fiddler。这个工具是我最好的朋友。您可以使用它来跟踪来自客户端的 http 和 https 流量(它将自己插入为客户端和服务器之间的中间人,充当客户端的代理,解密 https 流量等)。重要的是它还跟踪 https 连接(并揭示密码套装等)。在您的客户端上运行它并查看它显示的内容。
我唯一的另一个想法是,您设置的 AD 证书颁发机构的根证书尚未进入客户端计算机上的受信任的根证书颁发机构证书存储区。也检查一下。
答案3
RST 的另一个可能原因可能是缺少 signature_algorithm 扩展(在这种情况下默认为 SHA1)或没有与服务器证书签名匹配的对。因此,如果您升级到 sha512 RSA 签名证书并且客户端仅提供 SHA1 和 SHA256,则服务器将 RST 您的客户端 hello。
这里的情况并非如此,但如果有人发现这个问题,这可能会有所帮助。