С#: как подключиться к Active Directory с включенным SSL?

Проект, над которым я работаю, будет интегрироваться с Active Directory клиентов для аутентификации пользователей. Я пытался написать некоторый код, который будет извлекать пароль пользователя, и я понимаю, что Active Directory будет предоставлять соответствующие свойства только через SSL-соединение на порту 636.

Следующий код подключается программно без использования SSL, но тогда я не вижу свойства пароля:

static void Main(string[] args)
{
    DirectoryEntry entry = new DirectoryEntry(@"LDAP://<IP>/CN=LDAP Test,CN=Users,DC=customer,DC=com");
    entry.AuthenticationType = AuthenticationTypes.None;
    entry.Username = "CN=LDAP Test,CN=Users,DC=customer,DC=com";
    entry.Password = "<password>";
    if (entry != null)
    {
        foreach (Object propName in entry.Properties.PropertyNames)
        {
            Console.WriteLine((String)propName);
        }
    }
}

Когда я изменяю код для использования SSL, я получаю сообщение об исключении: «Неизвестная ошибка (0x80005000)».

Я включил SSL на сервере, на котором размещается Active Directory, установил ЦС Microsoft на том же сервере и получил сертификат от ЦС.

Я могу подключиться к Active Directory через SSL с помощью Apache Directory Studio, но это не показывает свойства пароля.

Следующий код показывает, что я пытался использовать для подключения с использованием SSL:

static void Main(string[] args)
{
    DirectoryEntry entry = new DirectoryEntry(@"LDAPS://<IP>:636/CN=LDAP Test,CN=Users,DC=customer,DC=com");
    entry.AuthenticationType = AuthenticationTypes.SecureSocketsLayer;
    entry.Username = "CN=LDAP Test,CN=Users,DC=customer,DC=com";
    entry.Password = "<password>";
    if (entry != null)
    {
        foreach (Object propName in entry.Properties.PropertyNames)
        {
            Console.WriteLine((String)propName);
        }
    }
}

Я не уверен, куда идти с этим, и некоторая помощь будет принята с благодарностью.


person James Watt    schedule 04.08.2009    source источник
comment
Связано: stackoverflow.com/questions/287100/   -  person Robert Harvey    schedule 04.08.2009
comment
FAQ по ADAM находится здесь: microsoft.com/windowsserver2003/adam/ADAMfaq.mspx# ОВП   -  person Robert Harvey    schedule 04.08.2009
comment
Название этого вопроса вводит в заблуждение, оно должно быть примерно таким: Как я могу получить пароль пользователя из Active Directory? Это не имеет ничего общего с подключением к Active Directory с включенным SSL?   -  person Bratch    schedule 02.12.2010


Ответы (2)


Я пытался написать код, который будет получать пароль пользователя...

Это не связано с вашей проблемой SSL, но я не думаю, что получить пароль пользователя из Active Directory возможно. Он хранит только хэш, и поэтому вы не получаете никакого свойства «пароль» при запросе свойств пользователя.

Обновленный ответ

После прочтения вашего комментария кажется, что вы ищете атрибут unicodePwd, который содержит хэш безопасности. Согласно информации MSDN, письмо на для этого атрибута требуется специальное соединение SSL, но вы все равно не сможете его прочитать, потому что это атрибут только для записи.

В частности, из MSDN:

Атрибут unicodePwd никогда не возвращается поиском LDAP.

Вот еще сообщение на форуме, которое я нашел, которое, кажется, говорит то же самое:

Пароль пользователя хранится в Active Directory в объекте пользователя в атрибуте unicodePwd. Этот атрибут может быть записан в ограниченных условиях, но не может быть прочитан из соображений безопасности. (Источник )

person Lance McNearney    schedule 04.08.2009
comment
Это гашиш, который мне нужен. Я признаю, что мой пост мог бы быть яснее об этом. Цель состоит в том, чтобы сравнить или авторизовать хэш, полученный из другой системы, с хешем, хранящимся в Active Directory. - person James Watt; 05.08.2009

Попробуйте добавить сертификат сервера и корневой сертификат в локальное хранилище. Самый простой способ сделать это — использовать IE для подключения к https://your.domain.contoller:636. Затем щелкните все экраны сертификатов и добавьте их в свой магазин.

person Andrew Strong    schedule 04.08.2009