Могу ли я заставить HttpClient использовать пользовательские настройки хранилища ключей / доверенных сертификатов Weblogic? - PullRequest
2 голосов
/ 25 мая 2011

Мое приложение использует Apache HttpClient 3.1 , развернутый на Weblogic 10.3 для выполнения POST с использованием SSL взаимной аутентификации. Я могу заставить это работать, используя следующие системные свойства для настройки хранилища ключей & хранилище доверенных сертификатов : -

-Djavax.net.ssl.keyStore=C:\Keystore\KEYSTORE.jks
-Djavax.net.ssl.keyStorePassword=changeit
-Djavax.net.ssl.trustStore=C:\Truststore\TRUSTSTORE.jks
-Djavax.net.ssl.trustStorePassword=changeit

Есть ли способ получить HttpClient для распознавания и использования настроек Weblogic custom keystore & truststore (как настроено в console / config.xml). Среди прочего, это обеспечит возможность сохранять пароли «скрытыми» и не отображаться в виде обычного текста в файлах конфигурации / консоли и т. Д.

Может ли кто-нибудь просветить меня?

Ответы [ 2 ]

2 голосов
/ 08 марта 2013

Мне удалось заставить HttpClient использовать настраиваемые сертификаты хранилища доверенных сертификатов weblogic для SSL-подключения, реализовав пользовательские TrustStrategy :

import sun.security.provider.certpath.X509CertPath;
import weblogic.security.pk.CertPathValidatorParameters;
import java.security.InvalidAlgorithmParameterException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertPath;
import java.security.cert.CertPathParameters;
import java.security.cert.CertPathValidator;
import java.security.cert.CertPathValidatorException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Arrays;

public class WeblogicSSLTrustStrategy implements TrustStrategy {

  @Override
  public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    validator = CertPathValidator.getInstance("WLSCertPathValidator");
    CertPath certPath = new X509CertPath(Arrays.asList(chain));

    // supply here the weblogic realm name, configured in weblogic console
    // "myrealm" is the default one
    CertPathParameters params = new CertPathValidatorParameters("myrealm", null, null);
    try {
      validator.validate(certPath, params);
    } catch (CertPathValidatorException e) {
      throw new CertificateException(e);
    } catch (InvalidAlgorithmParameterException e) {
      throw new CertificateException(e);
    }

    return true;
  }
} 

Этот код основан на Weblogicдокументация .Стратегия может быть передана в HttpClient через SSLSocketFactory:

SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));

SSLSocketFactory sslSocketFactory = new SSLSocketFactory(new WeblogicSSLTrustStrategy());
schemeRegistry.register(new Scheme("https", 443, sslSocketFactory));

PoolingClientConnectionManager connectionManager = new PoolingClientConnectionManager(schemeRegistry);

DefaultHttpClient httpClient = new DefaultHttpClient(connectionManager);

Единственным неизвестным параметром является имя Weblogic Realm, которое можно взять из API Weblogic JMX или просто предварительно настроить.Таким образом, не требуется создавать экземпляр хранилища доверенных сертификатов или перенастраивать параметры запуска Weblogic.

0 голосов
/ 05 июня 2011

Вы можете получить эти значения через JMX, используя KeyStoreMBean .Однако предупредите, что это может быть не тривиальным упражнением из-за следующего:

  • Это потребует сохранения паролей хранилища ключей в открытом тексте в вашем клиенте JMX (теперь, когда вы будете писать один в своем приложении),Это небезопасно, и из-за этого может произойти сбой аудита безопасности, в зависимости от того, для чего предназначен аудит.
  • MBean-компоненты могут быть недоступны во время выполнения из-за конфигурации службы JMX или будут иметьбыть доступным по-разному в разных сценариях.Предполагая WebLogic 11g, значения можно сделать доступными только для чтения, установив для значение атрибута EditMBeanServerEnabled JMXMBean значение false .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...