C #: Как подключиться к Active Directory с включенным SSL? - PullRequest
2 голосов
/ 04 августа 2009

Проект, над которым я работаю, будет интегрирован с 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 CA на этом же сервере и получил сертификат от CA.

Я могу подключиться к 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);
        }
    }
}

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

Ответы [ 2 ]

2 голосов
/ 05 августа 2009

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

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

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

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

Специально от MSDN:

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

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

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

0 голосов
/ 05 августа 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...