Запрос
Я пытаюсь определить, принудительно ли SChannel каким-либо образом истекает срок действия сеанса, например, потенциально возвращает SEC_E_CONTEXT_EXPIRED
из вызова к EncryptMessage
/ DecryptMessage
.
Документированное поведение
Когда вы устанавливаете сеанс TLS с использованием SChannel, вызовы InitializeSecurityContext
и AcceptSecurityContext
возвращают время истечения сеанса. В случае SChannel это связано с истечением срока действия сертификата партнера. Если сертификат не был предоставлен, то предоставляется максимальное значение времени по умолчанию.
Документация очень ограничена, указывается только:
Указатель на структуру TimeStamp, которая получает время истечения контекст. Рекомендуется, чтобы пакет безопасности всегда возвращал это значение по местному времени. Этот параметр является необязательным, и NULL должен передаваться недолговечным клиентам.
Мои наблюдения
Я считаю, что «NULL должен передаваться недолговечным «клиенты» означает только то, что аргумент является необязательным, и что недолговечные клиенты не должны беспокоиться об этом, просто они сформулированы более определенно, чем вы обычно ожидаете. Однако можно интерпретировать, что передача NULL приведет к отказу клиента от принудительного истечения срока действия.
У меня есть две точки данных, которые указывают, что истечение срока действия не принудительно:
- Если проверка сертификата отключена, то SChannel с радостью примет истекший сертификат и вернет время истечения в прошлом.
EncryptMessage
и DecryptMessage
будут работать в обычном режиме. - Страница MSDN по повторному согласованию представляет его как процесс, управляемый приложением.
Контекст для запроса
Я работаю над приложением, которое, как ожидается, будет оставаться подключенным в течение продолжительного времени, которое может превысить сертификат сервера. Я контролирую реализацию как клиента, так и сервера. Я рад, что приложение остается подключенным после истечения срока действия сертификата, но я хочу быть уверен, что соединения не будут внезапно разорваны, если SChannel выдает ошибку через некоторое время после истечения срока действия сертификата.