c++ - Windows 上的 TLS session 恢复

标签 c++ windows ssl

我们有 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 票证,您需要执行以下步骤:

  • 在注册表中创建一个值为 1 HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\EnableSslSessionTicket 的键 (DWORD)
  • 通过此 powershell 命令创建新的 TLS session 票证 key :New-TlsSessionTicketKey -Password -Path "C:\KeyConfig\TlsSessionTicketKey.config"-ServiceAccountName "System"https://technet.microsoft.com/en-us/itpro/powershell/windows/tls/new-tlssessionticketkey
  • 通过此 powershell 命令启用 TLS session 票证 key :Enable-TlsSessionTicketKey -Password -Path "C:\KeyConfig\TlsSessionTicketKey.config"-ServiceAccountName "System"https://technet.microsoft.com/en-us/itpro/powershell/windows/tls/启用-tlssessionticketkey
  • 重新启动服务器以启用 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在服务器端调用。这将允许
    生成票证的服务器
  • 执行上述步骤 2、3 和 4 创建 session 票证,然后在 Powershell 脚本
  • 中启用它
  • 确保您只在客户端创建一个凭证。
  • 服务帐户必须是以下之一:System、LocalService、NetworkService 或虚拟帐户的 SID。我们使用了 NetworkService
  • 关于c++ - Windows 上的 TLS session 恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63627219/

    相关文章:

    c# - 确定谁正在访问 Windows 2008 R2 服务器/Windows 7 中共享文件夹上的文件

    c++ - 将边添加到 Openmesh 网格

    .net - windbg 在 dll 函数调用级别调试 outlook 插件

    windows - C++使用SSL保证Windows上Winsock TCP数据安全

    windows - 通过批处理命令全屏?

    ssl - SSL 证书如何影响网页排名?

    internet-explorer - Internet Explorer 9 警告站点证书无效

    ios - 为什么 SecPKCS12Import 会自动将 SecIdentities 添加到钥匙串(keychain)中?

    python - 为什么 Libclang 无法获得头文件中定义的函数的定义?

    c++ - 如何确保所有 async_handler 在 boost::asio 停止之前完成?