SSPI Schannel API - Можно ли повторно использовать дескрипторы учетных данных?
В настоящее время я добавляю поддержку SSPI Schannel API в libcurl, чтобы можно было использовать протоколы с поддержкой SSL в Windows без каких-либо внешних зависимостей, таких как OpenSSL.
У меня уже есть работающая реализация SSL/TLS, но у меня есть очень конкретный вопрос, касающийся повторного использования учетных данных, возвращаемых функцией AcquireCredentialsHandle.
Правильно ли и возможно ли повторно использовать сеансы SSL/TLS, вместо того, чтобы создавать новый дескриптор, повторно использовать существующий и передавать его в InitializeSecurityContext несколько раз?
Моя работа над модулем Schannel для libcurl может быть найдена здесь, и экспериментальная версия, которая пытается использовать повторно, может быть найдена здесь.
Буду признателен за любую подсказку или отзыв об этом. Итак, можно ли повторно использовать учетные данные таким образом? И правильно ли это?
Заранее спасибо!
1 ответ
Я нашел ответ на свой вопрос и записал его здесь для других:
- Об этом уже спрашивали, и первый ответ можно найти здесь.
- Следующая информация может быть найдена на этой странице MSDN:
Ваше приложение получает учетные данные, вызывая функцию AcquireCredentialsHandle, которая возвращает дескриптор запрошенных учетных данных. Поскольку дескрипторы учетных данных используются для хранения информации о конфигурации, один и тот же дескриптор нельзя использовать как для операций на стороне клиента, так и на стороне сервера. Это означает, что приложения, поддерживающие как клиентские, так и серверные соединения, должны получить как минимум два дескриптора учетных данных.
Поэтому можно предположить, что безопасно повторно использовать один и тот же дескриптор учетных данных для нескольких соединений. И я проверил, что это действительно заставляет Schannel повторно использовать сеанс SSL/TLS. Это было проверено на Windows 7 Professional SP1.