Применяет ли SChannel истечение срока действия контекста? - PullRequest
0 голосов
/ 24 апреля 2020

Запрос

Я пытаюсь определить, принудительно ли SChannel каким-либо образом истекает срок действия сеанса, например, потенциально возвращает SEC_E_CONTEXT_EXPIRED из вызова к EncryptMessage / DecryptMessage.

Документированное поведение

Когда вы устанавливаете сеанс TLS с использованием SChannel, вызовы InitializeSecurityContext и AcceptSecurityContext возвращают время истечения сеанса. В случае SChannel это связано с истечением срока действия сертификата партнера. Если сертификат не был предоставлен, то предоставляется максимальное значение времени по умолчанию.

Документация очень ограничена, указывается только:

Указатель на структуру TimeStamp, которая получает время истечения контекст. Рекомендуется, чтобы пакет безопасности всегда возвращал это значение по местному времени. Этот параметр является необязательным, и NULL должен передаваться недолговечным клиентам.

Мои наблюдения

Я считаю, что «NULL должен передаваться недолговечным «клиенты» означает только то, что аргумент является необязательным, и что недолговечные клиенты не должны беспокоиться об этом, просто они сформулированы более определенно, чем вы обычно ожидаете. Однако можно интерпретировать, что передача NULL приведет к отказу клиента от принудительного истечения срока действия.

У меня есть две точки данных, которые указывают, что истечение срока действия не принудительно:

  • Если проверка сертификата отключена, то SChannel с радостью примет истекший сертификат и вернет время истечения в прошлом. EncryptMessage и DecryptMessage будут работать в обычном режиме.
  • Страница MSDN по повторному согласованию представляет его как процесс, управляемый приложением.

Контекст для запроса

Я работаю над приложением, которое, как ожидается, будет оставаться подключенным в течение продолжительного времени, которое может превысить сертификат сервера. Я контролирую реализацию как клиента, так и сервера. Я рад, что приложение остается подключенным после истечения срока действия сертификата, но я хочу быть уверен, что соединения не будут внезапно разорваны, если SChannel выдает ошибку через некоторое время после истечения срока действия сертификата.

...