Внешняя аутентификация SASL с UnboundID и сертификатами

Я хотел бы выполнить аутентификацию на основе сертификата с помощью моего LDAP OPENLDAP.

Я создал PKI, настроил клиент и сервер с хорошими хранилищами ключей, трастовыми хранилищами/сертификатами, ключом. Я также настраиваю LDAP на запрос сертификата во время рукопожатия SSL.

Затем я попытался пройти аутентификацию с помощью UnboudID LDAP следующим образом:

    //Create a unsecured connection

    LDAPConnection connection = new   LDAPConnection(hostname,port);

    //Secure the connection by the use of SSL (StartTLS operation)

    SSLUtil ssl = new SSLUtil(new KeyStoreKeyManager(keyStore, new String("somePasword").toCharArray()),
            new TrustStoreTrustManager(trustStore));
    SSLContext sslContext = ssl.createSSLContext();
    StartTLSExtendedRequest startTLSRequest = new StartTLSExtendedRequest(sslContext);
    ExtendedResult startTLSResult = connection.processExtendedOperation(startTLSRequest);

    //Bind request that should retrieve information from the client certificate and authenticate the client

    BindRequest bindRequest = new EXTERNALBindRequest("");
    BindResult bindResult = connection.bind(bindRequest);

    //The result is always SUCCESS...
    if (bindResult.getResultCode() != ResultCode.SUCCESS) {
        ...
    }

DN пользователя, к которому я хочу привязать соединение, соответствует: cn=12345,ou=anOrganizationUnit,o=anOrganization,dc=com,dc=example. Поскольку DN, исходящий из сертификата, скорее выглядит так: cn=12345,ou=...,o=...,l=Berlin,st=some-state,c=de Я также создал правило соответствия в LDAP.

bindRequest всегда завершается успешно, как только у меня есть сертификат, подписанный ЦС. Если DN, поступающее из LDAP, ничему не соответствует в LDAP, это не имеет значения. Я предполагаю, что это преобразовано в анонимное соединение. Но когда он соответствует существующему пользователю, это тоже не имеет значения. Пользователь не аутентифицирован, и у меня нет доступа к правам пользователя. Я попытался выполнить запрос WhoAmI, и он вернул: authzId = dn:cn=12345,ou=anorganizationunit,o=anorganization,dc=com,dc=example, что кажется хорошим (ну, с заглавными буквами, преобразованными в нижний регистр).

Есть ли что-то, что я пропустил в конфигурации LDAP? или это могут быть мои сертификаты?

Буду очень благодарен за любую помощь :)

EDIT: я не знаю, поможет ли это, но перед добавлением правила сопоставления я выполнил запрос WhoAmI, и результат был примерно таким: dn:cn\3D12345\2C...,o=organization,dc=com,dc=example. Общее имя, которое я ввел во время создания сертификата, похоже, было экранировано (\3D — это «=», \2C — это «,»).


person Guillaume Pansier    schedule 30.04.2015    source источник
comment
Получилось решить?   -  person Balaji Boggaram Ramanarayan    schedule 30.12.2017


Ответы (1)


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

Я почти уверен, что проблема связана с экранированием части CN. Я помню, что мое правило сопоставления было неправильным, и я думаю, что это было основной причиной. Но, если честно, могли быть и другие ошибки, которых я не помню.

person Guillaume Pansier    schedule 31.12.2017