我们有 C++ 代码,它使用 TCP/IP 在客户端和服务器之间进行通信,并使用 TLS 1.2 在两者之间进行加密。我想实现 TLS session 恢复,因为它会加速重新连接,这在我们的软件中很常见。我已经搜遍了 SO 和许多其他地方,但几乎没有找到明确的答案。我找到的最接近的是:https://forums.iis.net/t/1239418.aspx?How+to+enable+TLS+session+resumption+or+Optimize+TLS+handshake+on+Windows+2016+
该站点的说明在此处复制:
要在 win2k12 r2 和 win2k16 上启用 TLS session 票证,您需要执行以下步骤:
但我有一些问题。我可以在 PowerShell 中执行此操作,但我更喜欢在 C++ 代码中执行此操作。我们不使用 HTTP,只使用 TCP/IP。并且您在 Enable-TlsSessionTicketKey 中指定的服务帐户可能是用户帐户,而不是定义明确的系统帐户之一。
不可能这么难吧?它不是默认开启的,是吗?我正在查看 Wireshark 的捕获,但它看起来不像是打开的。在我的客户端 Hello 数据包中,我看到:session_ticket len=0,extended_master_secret len=0,renegotiation_info len=1。在我的 Server Hello 消息中,我没有看到任何 session 票证。我看到:extended_master_secret len=0,renegotiation_info len=1。
最佳答案
在与 Microsoft 开具支持票后,他们终于提供了执行此操作的方法。它仍然不是很好,但它有效。不是很好,因为我们必须在 Powershell 脚本中执行一些操作(而不是在代码中执行),并且服务帐户不能是普通用户帐户。
ASC_REQ_SESSION_TICKET
(一个未记录的选项)进入AcceptSecurityContext
在服务器端调用。这将允许生成票证的服务器
关于c++ - Windows 上的 TLS session 恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63627219/