SSPI Schannel API - Можно ли повторно использовать дескрипторы учетных данных?

В настоящее время я добавляю поддержку SSPI Schannel API в libcurl, чтобы можно было использовать протоколы с поддержкой SSL в Windows без каких-либо внешних зависимостей, таких как OpenSSL.

У меня уже есть работающая реализация SSL/TLS, но у меня есть очень конкретный вопрос, касающийся повторного использования учетных данных, возвращаемых функцией AcquireCredentialsHandle.

Правильно ли и возможно ли повторно использовать сеансы SSL/TLS, вместо того, чтобы создавать новый дескриптор, повторно использовать существующий и передавать его в InitializeSecurityContext несколько раз?

Моя работа над модулем Schannel для libcurl может быть найдена здесь, и экспериментальная версия, которая пытается использовать повторно, может быть найдена здесь.

Буду признателен за любую подсказку или отзыв об этом. Итак, можно ли повторно использовать учетные данные таким образом? И правильно ли это?

Заранее спасибо!

1 ответ

Решение

Я нашел ответ на свой вопрос и записал его здесь для других:

  1. Об этом уже спрашивали, и первый ответ можно найти здесь.
  2. Следующая информация может быть найдена на этой странице MSDN:

Ваше приложение получает учетные данные, вызывая функцию AcquireCredentialsHandle, которая возвращает дескриптор запрошенных учетных данных. Поскольку дескрипторы учетных данных используются для хранения информации о конфигурации, один и тот же дескриптор нельзя использовать как для операций на стороне клиента, так и на стороне сервера. Это означает, что приложения, поддерживающие как клиентские, так и серверные соединения, должны получить как минимум два дескриптора учетных данных.

Поэтому можно предположить, что безопасно повторно использовать один и тот же дескриптор учетных данных для нескольких соединений. И я проверил, что это действительно заставляет Schannel повторно использовать сеанс SSL/TLS. Это было проверено на Windows 7 Professional SP1.

Другие вопросы по тегам