Безопасно ли передается пароль с использованием DirectoryEntry
Я рассматриваю код, который проверяет подлинность учетных данных пользователя на сервере LDAP, создавая DirectoryEntry
объект следующим образом
DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd);
try
{
object obj = entry.NativeObject;
}
catch (Exception ex)
{
throw new Exception("Error authenticating user. " + ex.Message);
}
Если исключение не выдается, то код предполагает, что учетные данные пользователя в порядке..
Код работает нормально, но мои вопросы касаются того, насколько он безопасен. SSL используется для обеспечения безопасной связи между клиентом и веб-сервером, но есть ли уязвимость в связи между веб-сервером и сервером ldap?
Есть еще один перегруженный параметр DirectoryEntry
конструктор называется AuthenticationType
, Поскольку в приведенном выше коде не указан параметр AuthenticationType = None
что соответствует базовой аутентификации.
Было бы лучше использовать AuthenticationType = Secure
или же AuthenticationType = SecureSocketsLayer
или же AuthenticationType = Encryption
или может быть их побитовая комбинация?
Майкл
1 ответ
По умолчанию AuthenticationType.Secure используется, когда AuthenticationType не предоставлен в конструкторе. Эта опция уже шифрует пароль, так как для аутентификации используется NTLM/Kerberos.
Вы также можете указать флаг Sealing (вместе с Secure) для шифрования всего трафика (не только аутентификации). Это требует Kerberos.
Является ли сервер LDAP, который вы подключаете к AD? Я проверил, что вышеупомянутое работает для AD. (трафик зашифрован, как видно на Wireshark)