微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows上的TLS会话恢复

如何解决Windows上的TLS会话恢复

我们有C ++代码,该代码使用TCP / IP在客户端和服务器之间进行通信,并使用TLS 1.2对两者进行加密。我想实现TLS会话恢复,因为它可以加快重新连接的速度,这在我们的软件中经常出现。我已经搜索了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会话票证,您需要执行以下步骤:

  1. 注册表中创建值为1 HKLM \ SYstem \ CurrentControlSet \ Services \ HTTP \ Parameters \ EnableSslSessionTicket的密钥(DWORD)

  2. 通过此powershell命令创建新的TLS会话票证密钥:New-TlsSessionTicketKey -Password -Path“ C:\ KeyConfig \ TlsSessionTicketKey.config” -ServiceAccountName“ Systemhttps://technet.microsoft.com/en-us/itpro/powershell/windows/tls/new-tlssessionticketkey

  3. 通过此powershell命令启用TLS会话票证密钥:Enable-TlsSessionTicketKey -Password-路径“ C:\ KeyConfig \ TlsSessionTicketKey.config” -ServiceAccountName“ System” https://technet.microsoft.com/zh-我们/ itpro / powershell / windows / tls / enable-tlssessionticketkey

  4. 重新引导服务器以启用TLS会话票证生成。必须重新启动才能使注册表项生效。

但是我有一些问题。我可以在PowerShell中执行此操作,但我更喜欢在C ++代码中执行操作。我们不使用HTTP,仅使用TCP / IP。并且您在Enable-TlsSessionTicketKey中指定的服务帐户可能是用户帐户,而不是定义明确的系统帐户之一。

这不难吗?认情况下未启用,是吗?我正在查看Wireshark捕获,但看起来好像没有打开。在我的客户端Hello数据包中,我看到:session_ticket len = 0,extended_master_secret len = 0,renegotiation_info len = 1。在我的服务器Hello消息中,我看不到任何会话票证。我看到:extended_master_secret len = 0,renegotiation_info len = 1。

解决方法

在与Microsoft取得支持通知后,他们终于提供了实现此目的的方法。它仍然不是很好,但是可以。不太好,因为我们必须在Powershell脚本中执行某些操作(而不是在代码中执行),并且服务帐户不能是普通用户帐户。

  • 您必须将ASC_REQ_SESSION_TICKET(未记录的选项)传递到 服务器端的AcceptSecurityContext调用。这将允许 服务器生成票证
  • 执行上述步骤2、3和4以创建会话票据,然后在Powershell脚本中启用它
  • 确保仅在客户端上创建一个凭据。
  • 服务帐户必须是以下帐户之一:系统,本地服务,网络服务或虚拟帐户的SID。我们使用了NetworkService

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。