从电报到我的服务器的传入流量握手失败40



我的telegram Bot不再接收更新,因为上一次api更新仅适用于tls 1.2。

我试着用wireshark监听检查,我发现传出的请求是通过tls1.2成功发送的,但由于HANDSHAKE FAILURE,INCOMING ONES(更新,发送到我的机器人的命令(失败了。

Transport Layer Security
TLSv1.2 Record Layer: Alert (Level: Fatal, Description: Handshake Failure)
Content Type: Alert (21)
Version: TLS 1.2 (0x0303)
Length: 2
Alert Message
Level: Fatal (2)
Description: Handshake Failure (40)

知道我尝试过:

  1. 使用互联网选项启用Tls 1.2

  2. 已将客户端和服务器密钥添加到注册表中的SChanel条目(DisabledByDefault=0;Enabled=1(

  3. 已安装此更新kb3140245

  4. 在我的windows服务器2012 上安装了所有重要的更新

我应该怎么解决这个问题?谢谢你抽出时间。

注意:这是我原始答案的编辑转发,因为它因质量低而被删除。

问题是,在密码套件的TLS1.2集合中,Telegram API仅接受有限的集合。其中,Windows 2012仅支持TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e)TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x9f)。无法在创建新TelegramBotClient 时创建SSL/TLS的安全通道

然而,作为远程代码执行补丁的一部分,微软已经在2014年禁用了Windows 2012上这些密码的实现:MS14-066:SChannel中的漏洞可能允许远程代码执行:2014年11月11日

Qualys SSL实验室和NARTAC认为它们是不安全的密码。

请注意,Telegram API支持许多其他更安全的密码,甚至TLS 1.3,但任何版本的Windows 2012都不支持这些密码。在撰写本文时,任何Windows版本都不支持TLS 1.3。

总之,这解释了为什么会出现问题。坏消息是,Windows Server 2012上没有好的解决方案。目前最古老的支持Telegram机器人程序的Windows Server版本是Windows Server 2016。我要把我的机器人移到Ubuntu 19.10服务器上。

最新更新