Как включить пул соединений через LDAP SSL?

Хорошо, поэтому я перемещаю свое приложение с не-SSL на SSL-подключения к моему серверу LDAP. При запуске приложения без SSL пул соединений работает нормально. Однако, когда я переключаюсь на пулы SSL-соединений, они больше не работают.

Изучая здесь, я понял, что никогда не устанавливал " com.sun.jndi.ldap.connect.pool.protocol" на "обычный ssl", так как по умолчанию он установлен на обычный. Я думал, что это проблема.

Когда я реализовал изменение, включив «обычный ssl», это не решило проблему, и пулы соединений по-прежнему не использовались.

Есть ли какие-то другие настройки, которые мне не хватает?

Соответствующий код:

    Hashtable LDAPEnvironment = new Hashtable();
    LDAPEnvironment.put(Context.SECURITY_AUTHENTICATION, SECURITY_AUTHENTICATION);
    LDAPEnvironment.put(Context.SECURITY_PRINCIPAL, SECURITY_PRINCIPAL);
    LDAPEnvironment.put(Context.SECURITY_CREDENTIALS, SECURITY_CREDENTIALS);
    LDAPEnvironment.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
    LDAPEnvironment.put(Context.PROVIDER_URL, PROVIDER_URL );
    LDAPEnvironment.put(Context.SECURITY_AUTHENTICATION, "simple");
    LDAPEnvironment.put("java.naming.ldap.version", versionOfLDAP );

    if (ldapProtocol != null && ldapProtocol.equalsIgnoreCase("SSL")){
        LDAPEnvironment.put(Context.SECURITY_PROTOCOL,"ssl");
        LDAPEnvironment.put("com.sun.jndi.ldap.connect.pool.protocol","plain ssl");
    }

    LDAPEnvironment.put("com.sun.jndi.ldap.connect.pool", "true");

person Fran Fitzpatrick    schedule 29.09.2010    source источник
comment
@ Парень, который проголосовал за закрытие: это не принадлежит serverfault.com, потому что это проблема Java.   -  person Maurice Perry    schedule 30.09.2010


Ответы (2)


Я нашел проблему. В документации конкретно указано, что эти свойства являются системными свойствами, а не свойствами среды. Я устанавливал их как свойства среды. :-)

person Fran Fitzpatrick    schedule 06.10.2010

Если вы прокрутите немного вниз по предоставленной вами ссылке (прокрутите до «Как объединяются соединения»), вы увидите объяснение того, как работает объединение.

Когда вы запрашиваете объединенное соединение, вы получите его только в том случае, если ВСЕ указанные свойства идентичны. И это длинный список свойств...

В вашем случае это:

  • управление подключением
  • имя хоста, номер порта, указанный в свойстве «java.naming.provider.url», ссылка или URL-адрес, указанный в начальном контексте.
  • свойство java.naming.security.protocol
  • свойство java.naming.ldap.version
  • свойство java.naming.security.principal
  • Свойство java.naming.security.credentials

Если вы всегда используете одни и те же константы при запросе соединения из пула соединений, я думаю, вы должны получить одно и то же соединение из пула. То есть, если вы правильно установите свойства com.sun.jndi.ldap.connect.pool.*, но я не увидел этого в предоставленном вами коде.

Если вы установили для свойств com.sun.jndi.ldap.connect.pool.* разумные значения, попробуйте установить для com.sun.jndi.ldap.connect.pool.debug значение Fine. Это поможет вам отладить.

Другой вариант — использовать фреймворк или провайдера, который поддерживает пул соединений. Обратите внимание, что пул, предоставляемый вам Java, довольно ограничен. Раньше я использовал Spring-Ldap, и у него очень хорошая поддержка.

Надеюсь это поможет.

person Eran Harel    schedule 01.10.2010
comment
Не могли бы вы уточнить? Я включил фрагмент кода в редактирование выше. - person Fran Fitzpatrick; 05.10.2010
comment
Кроме того, мы используем только «простой» метод, так что это всего лишь несколько свойств... и все эти свойства кажутся установленными. - person Fran Fitzpatrick; 05.10.2010
comment
Эран, мне действительно нужно установить все свойства com.sun.jndi.ldap.connect.pool.*, чтобы получить пул SSL? За исключением com.sun.jndi.ldap.connect.pool.protocol, все значения по умолчанию должны быть правильными. --- Если вы не думаете, что com.sun.jndi.ldap.connect.pool.authentication должен быть простым, поскольку у меня есть эта строка: LDAPEnvironment.put(Context.SECURITY_AUTHENTICATION, simple); - person Fran Fitzpatrick; 05.10.2010